在我的表单中,我需要检测焦点是否移动到新控件。
我是否可以为整个表单执行此操作而无需为每个控件创建事件过程?
我已经尝试过了,但似乎没有开火。
Private Sub Form_SelectionChange()
MsgBox Screen.ActiveControl.Name
End Sub
答案 0 :(得分:0)
是的,使用WithEvents。它需要一点点,文档很差,但它最终可能会得到回报:
答案 1 :(得分:0)
这会在每个控件上创建一个事件(不完全是你要求的),但它非常干净。
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For Each control As Control In Controls
AddHandler control.Enter, AddressOf ControlReceivedFocus
Next
End Sub
Private Sub ControlReceivedFocus(sender As Object, e As EventArgs)
MessageBox.Show(sender.ToString())
End Sub
End Class
答案 2 :(得分:0)
This thread has a solution动态地向控件添加onClick
个事件。事实证明,虽然您可以添加自己的活动,但您无法添加自己的活动并且也有正常的control_click()
活动。它只是你可以通过代码在运行时设置它,它可以任意命名(只要它是一个函数)。
这回答了我的问题:你可以动态地向每个控件添加一个onclick
事件,而不必在gui中创建它们。如果您愿意,可以在form_onload
中输入以下语法:
with Me.myControl
Me.myControl.OnEnter = "=SomeFunction()"
end with
以下是向每个文本框控件添加.OnEnter
事件的方法(只需从SetReportControls
调用form_open
方法:
Private Sub SetReportControls()
Dim ctrl As Control
For Each ctrl In Me.Controls
With ctrl
If TypeOf ctrl Is Access.TextBox Then
.OnEnter = "=ReportControl(false)"
End If
End With
Next
End Sub
Private Function ReportControl(Cancel As Integer)
msgbox Screen.ActiveControl.Name
End Function