我正在使用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可以接受的类型?感谢您的帮助!
答案 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事件所需的签名不匹配。