2009-08-14 6 views
2

Je crée un certain nombre de UserControl s dynamiquement en utilisant LoadControl(String) et que vous souhaitez vous abonner à un événement de chacun d'eux.Comment s'inscrire de façon dynamique à un événement en utilisant des méthodes anonymes?

Tous mes contrôles hérite d'une Interface commune qui nécessitent une mise en œuvre d'un Event commun:

public interface IObjectProcessor 
{ 
    event EventHandler<ObjectProcessedEventArgs> ObjectProcessed; 
} 

Alors je faire sur mon événement de chargement de page:

protected void Page_Load() 
{ 
    switch(Request["type"]) 
    { 
    case "user": 
    { 
     LoadControl("AddUser.ascx", delegate(object sender, ObjectProcessedEventArgs e) 
     { 
      // do something 
     }); 
     break; 
    } 
    } 
} 

private void LoadControl(string path, Action<object, ObjectProcessedEventArgs> action) 
{ 
    var control = (IObjectProcessor)LoadControl(path) 
    control.ObjectProcessed // here! 
} 

Comment souscrire une deleagte à cet evènement?

Répondre

5

changement Action<object, ObjectProcessedEventArgs>-EventHandler<ObjectProcessedEventArgs>:

private void LoadControl(string path, EventHandler<ObjectProcessedEventArgs> handler) 
{ 
     var control = (IObjectProcessor)LoadControl(path) 
     control.ObjectProcessed += handler; 
} 
-1
control.ObjectProcessed += action 
+0

Impossible de convertir implicitement le type 'action ' à 'EventHandler ' – abatishchev

+0

créer declartion explicite de délégué (expéditeur d'objet, ObjectProcessedEventArgs e) et l'utiliser comme type d'entrée – Dewfy

Questions connexes