自定义按钮事件处理类
Posted
技术标签:
【中文标题】自定义按钮事件处理类【英文标题】:Class for Custom Button Event Handling 【发布时间】:2018-03-23 06:27:10 【问题描述】:1) 我有一个带有一些按钮的表单(它在 Access 中,但我想它也适用于 Excel)。
2) 我有一个自定义类可以帮助我调试该表单(以及我可能添加的未来表单)。
该类仅在表单事件触发时进行记录,例如加载、卸载、脏、退出。
我希望该类能够在单击按钮时进行记录。
我知道这可以通过使用标准模块并在那里加载公共集合来完成。或者直接使用表单的事件。或者通过存储在表单后面的集合中。
但如果可能的话,我希望将它全部封装在我的调试类中。然后在我添加的每个新表单的 Form_Load 事件中添加简单的两行代码。
我在下面的简化尝试仅捕获添加到类集合中的 last 按钮的事件,即。按钮 3。
TestButtons(带有 Button1、Button2 和 Button3 的表单)
Private Buttons As CButtons
Private Sub Form_Load()
Set Buttons = New CButtons
Buttons.LoadButtons Me
End Sub
CButtons(类):
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
想知道有没有人给点建议,谢谢!
【问题讨论】:
【参考方案1】:您无法处理集合中的事件。最简单的解决方案是使用单独的类来处理按钮事件,在多个按钮处理程序中创建这些类的集合,并将按钮从处理单个按钮的类传递给处理事件中的多个按钮的类。
类 CSingleButton
Public buttonsHandler As CButtons
Public WithEvents btn As Access.CommandButton
Private Sub btn_Click()
buttonsHandler.HandleClick btn
End Sub
类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
【讨论】:
完美运行!非常感谢您的建议,以及有用的修改代码@ErikvonAsmuth以上是关于自定义按钮事件处理类的主要内容,如果未能解决你的问题,请参考以下文章
Java AWT 图形界面编程事件处理机制 ① ( 事件处理步骤 | 创建事件源对象 -> 自定义事件监听器 -> 创建监听器实例对象 -> 事件源绑定事件监听器 )
Java AWT 图形界面编程事件处理机制 ① ( 事件处理步骤 | 创建事件源对象 -> 自定义事件监听器 -> 创建监听器实例对象 -> 事件源绑定事件监听器 )