到目前为止,我已经为用户窗体中的每个控件创建了一个事件。
Private Sub TextBox_Integrate_Indexes_Change()
Call LabView.textBoxChange(TextBox_Integrate_Indexes)
End Sub
Private Sub TextBox_Integrate_InputFile_Change()
Call LabView.textBoxChange(Me.TextBox_Integrate_InputFile)
End Sub
Private Sub TextBox_Integrate_OutputFile_Change()
Call LabView.textBoxChange(Me.TextBox_Integrate_OutputFile)
End Sub
如所见,这些事件都只是将其对象发送到我的方法,该方法然后处理该事件(检查其值是否已更改,如果已更改,则将更新的值存储在config.json文件中)
但是,我不是在为所有用户窗体文本框,选项按钮列表框,复选框和组合框创建事件,而是在徘徊,是否有办法检测该用户窗体是否发生任何事件,获取触发事件的项目,以及是否上述类型之一,然后将其发送给我的方法。
答案 0 :(得分:2)
是的,您可以创建一个包含私有文本框变量的自定义类。 然后,您可以在该类中捕获事件并将其传递给Labview类。
在UserForm中,您可以仅创建自定义类的集合,并将用户窗体的文本框设置为自定义类中的私有变量。
示例代码: cTextBox类别:
Private WithEvents p_TextBox As MSForms.TextBox
Public Property Let txtBox(value As MSForms.TextBox)
Set p_TextBox = value
End Property
Public Property Get txtBox() As MSForms.TextBox
Set txtBox = p_TextBox
End Property
Private Sub p_TextBox_Change()
Call Labview.textboxchange(p_TextBox)
End Sub
Labview类:
Public Sub textboxchange(val As MSForms.TextBox)
MsgBox val.Name
End Sub
用户代码:
Private t As MSForms.Control
Private ctb As cTextBox
Private cTextBoxes As Collection
Private Sub UserForm_Initialize()
Set cTextBoxes = New Collection
For Each t In Me.Controls
If TypeName(t) = "TextBox" Then
Set ctb = New cTextBox
ctb.txtBox = t
cTextBoxes.Add ctb
End If
Next t
End Sub
和测试整个程序的例程:
Public Labview As New Labview
Sub test()
UserForm1.Show
End Sub