2010-03-17 7 views
3

J'utilise AddHandler pour câbler une fonction à l'événement d'un contrôle que je crée dynamiquement:Comprendre AddHandler et transmettre les délégués et les événements

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 

Ce code génère une exception d'exécution indiquant:

Impossible de jeter l'objet de type « MyEventHandlerDelegate » taper « System.EventHandler »

Qu'est-ce que je ne comprends au sujet System.Delegate même si AddHandler prend comme un argument de type "System.Delegate"? Quel type ne « EventHandler besoin d'être de jeter à un type qui AddHandler peut accepter? Merci pour votre aide!

Répondre

5

Il semble que le problème réside dans le fait que vous mélangez des types. il a la même signature que System.EventHandler, n'est pas un System.EventHandler

Donc, vous devez d pour changer votre méthode prendre System.EventHandler au lieu de System.Delegate:

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

C'est exactement ce que j'ai compris! Merci de votre aide. – Achilles

0

Le délégué vous passez à BuildControl est de type MyEventHandlerDelegate. Pourriez-vous nous montrer la signature de ce délégué? Il se peut que la signature de votre délégué ne corresponde pas à la signature requise par l'événement Button.Click

+0

j'ai ajouté la signature du délégué. – Achilles

Questions connexes