Один вариант - использовать 2 стандартные функции в вашем коде (одну, чтобы скрыть элемент управления, другую, чтобы показать его), а затем присвоить событиям текстового поля OnGotFocus
одну в зависимости от того, является ли она text_box_a
или одной.других элементов управления:
Сначала вы устанавливаете 2 разные функции:
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
Затем вы можете назначить различные события управления одному из них в цикле в FormLoad
событие.Как то так:
Private Sub Form_Load()
' set up the form detail's OnClick event separately from the control loop.
Me.Detail.OnClick = "=HideListBox()"
Dim ctl As Access.Control
For Each ctl In Me.Controls
If ctl.Name = Me.list_ctrl.Name Then
' do nothing here
' (control will be hidden or not
' based on other control's OnGotFocus,
' or Form details OnClick
ElseIf ctl.Name = Me.text_box_a.Name Then
ctl.OnGotFocus = "=ShowListBox()"
ElseIf TypeName(ctl) = "TextBox" Then
ctl.OnGotFocus = "=HideListBox()"
End If
Next ctl
End Sub