2010-03-17 58 views
3

我使用的AddHandler接線到控件的事件的功能,我動態創建:理解的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」類型的參數?什麼類型不「事件處理程序需要註冊後才能轉換爲一個類型的AddHandler能接受嗎?感謝您的幫助!

回答

5

聽起來問題在於你是混合類型,點擊事件需要System.EventHandler你的自定義委託它與System.EventHandler具有相同的簽名,不是System.EventHandler

因此,你需要d改變你的方法取System.EventHandler而不是System.Delegate

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

這正是我想通的!謝謝你的幫助。 – Achilles 2010-03-17 21:47:56

0

要傳遞到BuildControl委託是MyEventHandlerDelegate類型的,你能告訴我們委託的簽名?這可能是因爲你的委託簽名與Button.Click事件所要求的簽名不匹配

+0

我添加了委託簽名。 – Achilles 2010-03-17 21:39:31