了解AddHandler并传递委托和事件

时间:2010-03-17 21:29:55

标签: .net vb.net events event-handling delegates

我正在使用AddHandler将函数连接到我动态创建的控件事件:

Public Delegate Sub MyEventHandlerDelegate(ByVal sender As Object, ByVal e As System.EventArgs)

Public Sub BuildControl(EventHandler as System.Delegate)

         dim objMyButton as new button

         AddHandler objMyButton.Click, EventHandler

    end Sub

此代码生成一个运行时异常,说明:

无法将“MyEventHandlerDelegate”类型的对象强制转换为“System.EventHandler”

即使AddHandler采用“System.Delegate”类型的参数,我对System.Delegate的理解还不清楚?什么类型“EventHandler需要转换为AddHandler可以接受的类型?感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

听起来问题是你在混合类型。点击事件需要System.EventHandler。您的自定义委托虽然与System.EventHandler具有相同的签名,但却不是System.EventHandler

因此,您需要更改方法System.EventHandler而不是System.Delegate

Public Sub BuildControl(EventHandler as System.EventHandler)
     dim objMyButton as new button
     AddHandler objMyButton.Click, EventHandler
End Sub

答案 1 :(得分:0)

您传递给BuildControl的委托的类型为MyEventHandlerDelegate。你能告诉我们那个代表的签名吗?可能是您的委托的签名与Button.Click事件所需的签名不匹配。