2

我有一个我无法解决的问题。

我创建了一个带有 for 循环的简单表单,该循环处理 n 个按钮的创建,在循环结束时,我将按钮设置为 .Click 事件的特定子

AddHandler btn.Click AddressOf mySub

现在我想在课堂上做同样的事情。所以我创建了我的新类然后我写了一个简单的方法

Public Sub buttonCreation(byval nButton as Integer)

该方法与表单中的方法完全相同,但是当我必须为按钮的 .Click 事件添加处理程序时,我卡住了。

然后我尝试创建一个委托,但我无法使用它,AddressOf 只接受不带括号的方法的名称。

编辑

我在表单中创建了委托

 Dim delegate As EventHandler
 delegate  = New EventHandler(AddressOf mySub)

然后我调用我的类方法并将委托作为参数传递

ClassA.buttonCreation(10, delegate) 

我在循环结束时卡在这里应该分配给子按钮以在事件时调用。点击被解雇,我试图这样做但显然不起作用

AddHandler btn.Click AddressOf delegate

你能帮助我吗 ?此致

PS:显然我要指向的方法不在类内部,而是在表单内部。

4

1 回答 1

5

您可以使用委托方法,只需去掉AddressOf关键字并将委托直接放在逗号之后。

这是一个简单的例子:

Public Class Form1

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        ClassA.buttonCreation(5, FlowLayoutPanel1, New EventHandler(AddressOf mySub))
    End Sub

    Private Sub mySub(sender As System.Object, e As System.EventArgs)
        Dim btn As Button = DirectCast(sender, Button)
        MessageBox.Show(btn.Text)
    End Sub

End Class

Public Class ClassA

    Public Shared Sub buttonCreation(ByVal n As Integer, ByVal AddTo As Control, ByVal dlg As EventHandler)
        For i As Integer = 1 To n
            Dim btn As New Button
            btn.Text = "Btn" & i
            AddHandler btn.Click, dlg
            AddTo.Controls.Add(btn)
        Next
    End Sub

End Class
于 2013-07-08T17:31:08.880 回答