我有一个我不能解决的问题。
我使用for循环创建了一个简单的表单,该循环处理n个按钮的创建,在循环结束时,我为该按钮设置了.Click事件的特定sub
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:很明显,我想要指向的方法不在类中,但它在表单中。
发布于 2013-07-09 01:31:09
您可以使用委托方法,只需去掉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 Classhttps://stackoverflow.com/questions/17532207
复制相似问题