委托和地址

Wan*_*lli 1 vb.net delegates

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

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

AddHandler btn.Click AddressOf mySub
Run Code Online (Sandbox Code Playgroud)

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

Public Sub buttonCreation(byval nButton as Integer)
Run Code Online (Sandbox Code Playgroud)

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

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

编辑

我在表单中创建了委托

 Dim delegate As EventHandler
 delegate  = New EventHandler(AddressOf mySub)
Run Code Online (Sandbox Code Playgroud)

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

ClassA.buttonCreation(10, delegate) 
Run Code Online (Sandbox Code Playgroud)

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

AddHandler btn.Click AddressOf delegate
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗 ?此致

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

Idl*_*ind 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
Run Code Online (Sandbox Code Playgroud)