了解AddHandler并传递委托和事件

Ach*_*les 3 .net vb.net events delegates event-handling

我正在使用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
Run Code Online (Sandbox Code Playgroud)

此代码生成运行时异常,指出:

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

即使AddHandler作为"System.Delegate"类型的参数,我对System.Delegate的理解是什么?什么类型"EventHandler需要转换为AddHandler可以接受的类型? 感谢您的帮助!

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