【问题标题】:Making a Button invisible in its click handler使按钮在其单击处理程序中不可见
【发布时间】:2019-01-21 11:06:33
【问题描述】:

在我的子表单(ms-access 中的 VBA)中,有一个名为“Test”的按钮,该按钮在被点击后必须设置为不可见。

所以我尝试了:

Private Sub Test_Click()
    'Do some stuff
    Me.Test.Visible = False
End Sub

但这不起作用。它会引发错误,因为无法使具有焦点的按钮不可见。不幸的是,该按钮是表单上的唯一按钮(其他控件是标签)。由于按钮位于子窗体中,我尝试将焦点设置到父窗体中的按钮:

Private Sub Test_Click()
    'Do some stuff
    call me.parent.schclose.SetFocus
    Me.Test.Visible = False
End Sub

但这也不起作用。 'call me.parent.schclose.SetFocus' 不会引发错误,但 'Me.Test.Visible = False' 确实像以前一样。

那么,如何让按钮不可见呢?

【问题讨论】:

    标签: vba forms button


    【解决方案1】:

    您可以做的是展开您的用户表单并添加一个默认可见的按钮。假设当前您的用户表单的高度为 300,宽度为 300。将表单展开为 500X500 并将新按钮放在该表单的右下角(保持可见属性设置为是)。接下来将这段代码添加到表单中:

    Private Sub UserForm_Initialize()
    Me.Height = 300
    Me.Width = 300
    End Sub
    

    现在,当您单击测试按钮时,它将不可见,并且新按钮仍将被隐藏,因为它不在您上面设置的高度内。

    【讨论】:

    • 另外,您无需再更改 Test_click 上的焦点。您唯一需要的就是 Me.Test.Visible = False
    • 这似乎有效。但这是一个非常讨厌的解决方法。我终于使用了另一种方法(受您的回答启发)
    • @Gener4tor 那个方法是什么?
    • 见下文。我使用“带有透明边框的空只读编辑字段”。
    【解决方案2】:

    受 VBA_SQL_Programmer 答案的启发,我在表单中创建了一个带有透明边框(这意味着它基本上是不可见的)的空只读编辑字段来设置焦点。

    所以我的代码如下所示:

    Private Sub Test_Click()
        'Do some stuff
        call me.invisibleTextBox.SetFocus
        Me.Test.Visible = False
    End Sub
    

    这无需操纵表单的大小即可工作。

    但是也有一个问题,因为当焦点设置在文本框上时,用户可以看到一个闪烁的光标。

    【讨论】:

    • 我认为我们必须就最佳方法达成一致意见。在我看来,设置高度和宽度是最好的做法,因为如果你不这样做,那么表单可能会在不同的计算机/显示器设置上以奇怪的尺寸打开。这会让它看起来不专业
    • 此表单是嵌入在其他一些表单中的子表单。所以父表单也可以设置大小。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-09
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多