views:

465

answers:

3

I am using AddHandler to wire a function to a control's event that I dynamically create:

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

This code is generating a run-time exception stating:

Unable to cast object of type 'MyEventHandlerDelegate' to type 'System.EventHandler'

What am I not understanding about System.Delegate even though AddHandler takes as an argument of type "System.Delegate"? What Type does "EventHandler need to be to cast to a type that AddHandler can accept? Thanks for your help!

A: 

The delegate you are passing to BuildControl is of type MyEventHandlerDelegate. Could you show us the signature of that delegate? It could be that the signature of your delegate does not match the signature required by the Button.Click event.

Peter Lillevold
I added the delegate signature.
Achilles
+1  A: 

It sounds like the problem is that you are mixing types. The click event requires a System.EventHandler. Your custom delegate, although it has the same signature as System.EventHandler, is not a System.EventHandler.

So, you need to change your method take System.EventHandler instead of System.Delegate:

Public Sub BuildControl(EventHandler as System.EventHandler)
     dim objMyButton as new button
     AddHandler objMyButton.Click, EventHandler
End Sub
Zach Johnson
That's exactly what I figured out! Thanks for your help.
Achilles
A: 

You can refer this link http://www.codeproject.com/KB/cs/Delegate_To_Event_in_CS.aspx

Rakesh Gunijan