动态按钮单击事件处理程序

Deb*_*ahu 27 vb.net

我在表单中动态创建了100个按钮.我怎样才能为它们添加事件处理程序?

Ree*_*sey 51

您可以使用AddHandler为任何事件添加处理程序.

例如,这可能是:

AddHandler theButton.Click, AddressOf Me.theButton_Click
Run Code Online (Sandbox Code Playgroud)

  • 如果以编程方式处理按钮,请不要忘记使用`RemoveHandler theButton.Click,AddressOf Me.Button_Click`. (6认同)

Jas*_*n S 12

只是为了完善Reed的答案,您可以ButtonForm其他容器中获取对象并添加处理程序,也可以以Button编程方式创建对象.
如果ButtonForm其他容器中获取对象,则可以迭代或其他容器控件的Controls集合Form,例如PanelFlowLayoutPanel等等.然后你可以添加点击处理程序
AddHandler ctrl.Click, AddressOf Me.Button_Click(变量如下面的代码),
但我更喜欢检查Control和转换为a 的类型,Button因为我没有为容器中的任何其他控件添加点击处理程序(例如标签).请记住,您可以Button使用此处为任何事件添加处理程序AddHandler.
或者,您可以以Button编程方式创建对象,如下面的第二个代码块.
当然,你必须编写处理程序方法,如下面的第三个代码块.

下面是一个使用Form容器的示例,但您可能最好使用一个Panel或其他容器控件.

Dim btn as Button = Nothing
For Each ctrl As Control in myForm.Controls
    If TypeOf ctrl Is Button Then
        btn = DirectCast(ctrl, Button)
        AddHandler btn.Click, AddressOf Me.Button_Click   ' From answer by Reed.
    End If
 Next
Run Code Online (Sandbox Code Playgroud)

或者以Button编程方式创建s,这次添加到Panel容器.

Dim Panel1 As new Panel()
For i As Integer = 1 to 100
    btn = New Button()
    ' Set Button properties or call a method to do so.
    Panel1.Controls.Add(btn)  ' Add Button to the container.
    AddHandler btn.Click, AddressOf Me.Button_Click   ' Again from the answer by Reed.
Next
Run Code Online (Sandbox Code Playgroud)

然后你的处理程序将看起来像这样

Private Sub Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
    ' Handle your Button clicks here
End Sub
Run Code Online (Sandbox Code Playgroud)