在我的程序中,我有9个按钮,并且为每个按钮分别编写了9个事件处理程序,尽管每个事件处理程序中的代码都是相同的。更改所有按钮的代码非常繁琐。是否可以创建一个单一的Button.Click事件处理程序来处理所有按钮的Button.Click事件?
您可以修改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
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
For Each b As Button In XXXXX.Controls.OfType(Of Button)
AddHandler b.Click, AddressOf MyClickHandler
Next
其中XXXXX
可能是我
或者一个面板、组合框等——按钮所在的位置。
以下是如何在运行时动态执行此操作,以便您不必为所有按钮编写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
属性,仅在该值匹配时才连接处理程序。这只是我能想到的几种方法。