【问题标题】:How can I make a single event handler handle ALL Button.Click events?如何让单个事件处理程序处理所有 Button.Click 事件?
【发布时间】:2014-06-03 18:50:44
【问题描述】:

在我的程序中,我有 9 个按钮,每个按钮都有 9 个单独的事件处理程序,尽管每个事件处理程序中的代码是相同的。事实证明,为所有这些更改代码是非常乏味的。是否可以创建一个 Button.Click 事件处理程序来处理我所有按钮的 Button.Click 事件?

【问题讨论】:

    标签: .net vb.net events button event-handling


    【解决方案1】:

    您可以修改 VS 生成的事件代码上的Handles 子句,以便它可以为多个控件处理相同的事件。在大多数情况下,有人可能希望将大多数(但不是全部)按钮点击集中到一个过程。要更改 Handles 子句:

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button1.Click, 
                     Button3.Click, Button4.Click ...
        ' just add the extra clicks for the additional ones
    
        ' you will need to examine "Sender" to determine which was clicked
    
        ' your code here
    End Sub
    

    这也可以动态完成,例如对于在 Load 事件(或任何地方)中创建并添加到表单的控件:

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        AddHandler Button1.Click, AddressOf AllButtonsClick
        AddHandler Button2.Click, AddressOf AllButtonsClick
        AddHandler Button3.Click, AddressOf AllButtonsClick
    
    End Sub
    

    要将所有按钮直接连接到同一个事件,您可以循环通过控件集合(使用 Linq):

    For Each b As Button In XXXXX.Controls.OfType(Of Button)
         AddHandler b.Click, AddressOf MyClickHandler
    Next
    

    XXXXX 可能是 Me 或面板、组框等 - 无论按钮在哪里。

    【讨论】:

      【解决方案2】:

      您可以将您的点击事件连接到一个特定的事件。你怎么做取决于你使用的IDE。 如果您使用的是 Visual Studio,那么:

      选择一个按钮控件并按 F4。这将打开该控件的属性窗口。在事件部分(通常是一个小闪电图标)中,您可以分配此特定控件支持的各种事件。在这里您可以选择任何特定的活动或创建自己的活动。

      【讨论】:

        【解决方案3】:

        以下是在运行时动态执行此操作的方法,因此您不必为所有按钮编写 AddHandler

        Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            For Each ctrl In Me.Controls
                If (TypeOf ctrl Is Button) Then _
                   AddHandler DirectCast(ctrl, Button).Click, AddressOf HandleButtonClick
            Next
        End Sub
        

        当然,如果这太宽泛了,例如,您可以只将要连接到此事件的按钮放在面板内,然后将控件循环扔到 YourPanel.Controls 中而不是表单中。或者您可以将每个按钮上的.Tag 属性设置为某个值,并且仅在该值匹配时才连接处理程序。只是我能想到的几种方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-18
          • 1970-01-01
          • 2013-12-24
          • 1970-01-01
          • 2015-01-17
          • 1970-01-01
          • 2021-10-29
          相关资源
          最近更新 更多