1)我有一个带有一些按钮的表单(在Access中,但我想它也适用于Excel)。
2)我有一个自定义类,可以帮助我调试该表单(以及我可能添加的未来表单)。
该类只是在表单事件触发时记录,例如加载,卸载,脏,退出。
我希望该课程能够在点击按钮时记录。
我知道这可以通过使用标准模块并在那里加载公共集合来完成。或直接使用表单的事件。或者通过存储在表单后面的集合中。
但是,如果可能的话,我想在我的调试类中将 all 封装起来。然后将它添加到我添加的每个新表单的Form_Load事件中的简单两行。
下面的简化尝试仅捕获在类集合中添加的 last 按钮的事件,即。 BUTTON3。
TestButtons(包含Button1,Button2和Button3的表单)
Private Buttons As CButtons
Private Sub Form_Load()
Set Buttons = New CButtons
Buttons.LoadButtons Me
End Sub
CButtons(Class):
Public WithEvents btn As Access.CommandButton
Private AllButtons As Collection
Const MODE_DEBUG As Boolean = True
Public Sub LoadButtons(ByRef TheForm As Access.Form)
Dim ctl As Control
Set AllButtons = New Collection
For Each ctl In TheForm.Controls
If ctl.ControlType = acCommandButton Then
Set btn = ctl
btn.OnClick = "[Event Procedure]"
AllButtons.Add btn
End If
Next ctl
End Sub
Private Sub btn_Click()
If MODE_DEBUG Then debug.print btn.Name & "_Click"
End Sub
想知道是否有人有任何建议,谢谢!
答案 0 :(得分:1)
您无法处理集合中的事件。最简单的解决方案是使用一个单独的类来处理按钮事件,在多个按钮处理程序中创建这些类的集合,并将处理单个按钮的类中的按钮传递给处理事件上多个类的类。
Class CSingleButton
Public buttonsHandler As CButtons
Public WithEvents btn As Access.CommandButton
Private Sub btn_Click()
buttonsHandler.HandleClick btn
End Sub
Class CButtons
Private ButtonHandlers As Collection
Const MODE_DEBUG As Boolean = True
Public Sub LoadButtons(ByRef TheForm As Access.Form)
Dim ctl As Control
Dim btnHandler As CSingleButton
Set ButtonHandlers = New Collection
For Each ctl In TheForm.Controls
If ctl.ControlType = acCommandButton Then
Set btnHandler = New CSingleButton
Set btnHandler.btn = ctl
Set btnHandler.buttonsHandler = Me
ctl.OnClick = "[Event Procedure]"
ButtonHandlers.Add btnHandler
End If
Next ctl
End Sub
Public Sub HandleClick(btn As Access.CommandButton)
If MODE_DEBUG Then debug.print btn.Name & "_Click"
End Sub