在其边界之外单击时隐藏表单控件,VBA Access

时间:2018-12-07 16:13:00

标签: vba ms-access

我有一个包含以下控件的表单:

  1. 三个文本框(text_box_a,text_box_b,text_box_c)
  2. 列表框(list_ctrl)
  3. 相框(pic_frame)

我希望列表框在用户单击其边界之外时消失,但在单击一个特定的文本框( text_box_a )时不消失。当它在上述文本框中单击时,也会重新出现。

我尝试过的事情:

if(bereq.http.host == "magento-host.com") {
  // specific config for magento
}
if(bereq.http.host == "prestashop-host.com") {
  // specific config for prestashop
}

我正在使用Microsoft Access 2013

2 个答案:

答案 0 :(得分:1)

  
    

只要用户在其边界之外单击,我希望列表框消失...

  

如果您要单击“表单详细信息”部分(说出“超出其边界”),则可以使用表单的Detail_Click()事件。

使用文本框的Enter事件还可以“捕捉”相应标签上的单击,并且在使用键盘移动焦点时也可以使用。

Private Sub Detail_Click()
    If Not (Me.list_ctrl Is Me.ActiveControl) Then
        Me.list_ctrl.Visible = False
    End If
End Sub

Private Sub text_box_a_Enter()
    Me.list_ctrl.Visible = True
End Sub

Private Sub text_box_b_Enter()
    Me.list_ctrl.Visible = True
End Sub

Private Sub text_box_c_Click()
    Me.list_ctrl.Visible = True
End Sub

但是在list_ctrl处于焦点时隐藏它是一个问题。

答案 1 :(得分:0)

一个选择是在代码中使用2个标准函数(一个隐藏控件,另一个显示该控件),然后根据是否为{{1 }}或其他控件之一:

首先,您设置2个不同的功能:

OnGotFocus

然后,您可以在text_box_a事件中循环将不同的控制事件分配给其中一个。像这样:

Public Function ShowListBox()
    Me.list_ctrl.Visible = True
End Function

Public Function HideListBox()        
    ' if active control is list box, change active control
    ' before hiding list box
    If Me.ActiveControl.Name = Me.list_ctrl.Name Then
        Me.text_box_b.SetFocus
    End If

    Me.list_ctrl.Visible = False

End Function