更新:在对象浏览器中进行了进一步的研究……似乎MSForms.TextBox
既未实现.Name
属性也未实现_Exit
事件-仅实现{ {1}}个事件。有没有办法确定哪个特定的_Change
产生了变更事件?
或者可以将TextBox
与这种技术一起使用吗? MSForms.Control
对象实现Control
属性和.Name
事件。
您可以收听TextBox退出事件吗?类似于普通TextBox事件如何工作?例如
_Exit
以下内容未捕获退出事件。而且,虽然我可以在本地窗口中看到为MyTextBox生成事件的TextBox的.Name属性,但我无法访问该信息来确定要对哪个标签进行操作。
该类技术改编自this post和this post,它们捕获了更改事件。
clsTextBox类:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Update a certain label based on the value of the TextBox
End Sub
我有一系列动态创建的需要监听器的控件。代码如下:
Private WithEvents MyTextBox As MSForms.TextBox
Public Property Set Control(tb As MSForms.TextBox)
Set MyTextBox = tb
End Property
' Want to handle this event, but it's not caught when exiting the TextBox control
Private Sub MyTextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Debug.Print me.Control.name
'Update a certain label based on the value of the TextBox
Stop
End Sub
' Catching this event but can't identify the control which triggered it
Private Sub MyTextBox_Change()
Debug.Print MyTextBox.Value ' <--- This prints the correct value
Debug.Print Me.Control.Name ' <--- ERROR here on any variation of Me or MyTextBox
'Update a certain label based on the value of the TextBox
Stop
End Sub
答案 0 :(得分:1)
MSForms.Control
定义了Enter
和Exit
事件:如果需要处理TextBox.Change
,则需要两个WithEvents
变量:
Private WithEvents TextBoxEvents As MSForms.TextBox
Private WithEvents ControlEvents As MSForms.Control
Public Property Set Control(ByVal tb As Object)
Set TextBoxEvents = tb
Set ControlEvents = tb
End Property
MSForms.Control
也是您访问诸如Name
,Top
,Left
,Visible
等属性的界面。
提示:切勿手动键入事件处理程序过程签名。从代码窗格左上角的下拉菜单中选择源接口,然后从右上角的下拉菜单中选择一个要处理的事件。让VBE生成具有正确签名的成员。如果您正在处理程序过程中,并且左上角的下拉菜单中显示“(常规)”,则说明您不在事件处理程序中。
虽然上面的代码可以正常编译,并且MSForms.Control
接口可以公开我们想要处理的事件...
?TypeOf tb Is MSForms.Control
True
?TypeOf tb Is MSForms.TextBox
True
...幕后有一些COM黑客活动; VBA有足够的烟雾和镜像可以成功地编译上述内容,但是,基本上,您正在看《黑客帝国》中的故障(Rubberduck的解析器在MSForms控件中存在类似的“ nope”问题):没有任何明显的方法可以获取VBA将动态控制对象绑定到其MSForms.Control
事件。
答案 1 :(得分:1)
借助ConnectToConnectionPoint API,您可以捕获每个控件的事件(每个事件,以及Enter和Exit)。
在这里看看:Trigger Enter field behaviour through class for a control
退出将是
<link rel="stylesheet" href="{{ URL::to('css/styles.css') }}">