自定义按钮事件处理类

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 图形界面编程事件处理机制 ① ( 事件处理步骤 | 创建事件源对象 -> 自定义事件监听器 -> 创建监听器实例对象 -> 事件源绑定事件监听器 )

观察者模式(自定义事件)

带有 Onclick 的自定义按钮,隐藏 Onclick 事件

Windows 应用程序 - 自定义事件被多次调用

◆◆1OO ALV-单击事件,双击事件,添加自定义按钮事件(EVENT)实例