代码之家  ›  专栏  ›  技术社区  ›  Achilles

了解addhandler并传递委托和事件

  •  3
  • Achilles  · 技术社区  · 15 年前

    我正在使用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 回复  |  直到 15 年前
        1
  •  5
  •   Zach Johnson    15 年前

    听起来问题是你在混音。单击事件需要 System.EventHandler . 您的自定义委托,尽管它与 系统事件处理程序 不是一个 系统事件处理程序 .

    所以,你需要改变你的方法 系统事件处理程序 而不是 System.Delegate :

    Public Sub BuildControl(EventHandler as System.EventHandler)
         dim objMyButton as new button
         AddHandler objMyButton.Click, EventHandler
    End Sub
    
        2
  •  0
  •   Peter Lillevold Rene    15 年前

    传递给BuildControl的委托类型为 MyEventHandlerDelegate . 你能给我们看一下那个代表的签名吗?可能是您的委托的签名与按钮所需的签名不匹配。单击事件。