如何让单个事件处理程序处理所有Button.Click事件?

7yp*_*oid 2 .net vb.net events button event-handling

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

Ňɏs*_*arp 7

您可以修改HandlesVS生成的事件代码上的子句,以便它可以为多个控件处理相同的事件.在大多数情况下,有人可能希望将大多数(但不是全部)按钮点击汇集到一个过程.要更改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
Run Code Online (Sandbox Code Playgroud)

这也可以动态完成,例如在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
Run Code Online (Sandbox Code Playgroud)

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

For Each b As Button In XXXXX.Controls.OfType(Of Button)
     AddHandler b.Click, AddressOf MyClickHandler
Next
Run Code Online (Sandbox Code Playgroud)

XXXXX可能是哪里Me或面板,组框等 - 按钮在哪里.