2009-07-02 6 views
1

J'ai un bouton sur ma page de téléchargement et je souhaite que ContentPage gère l'événement Click du bouton. Voici ce que j'ai jusqu'à présent:Gestion de l'événement MasterPage sur ContentPage

//Event in MasterPage 
public event EventHandler Search_Submit; 

//ButtonClick event in MasterPage 
protected void SearchButton_Click(object sender, EventArgs e) 
    { 
     if (Search_Submit != null) 
     {    
      Search_Submit(this, EventArgs.Empty); 
     } 
    } 


//EventHandler in Page_Init on ContentPage 
Master.Search_Submit += new EventHandler(Master_Search_Submit); 

//Search_Submit event in ContentPage 
private void Master_Search_Submit(object sender, EventArgs e) 
    { 
     //Perform appropriate action... 
    } 

Tout cela fonctionne - cependant, je voudrais passer une valeur avec les EventArgs. Je crois que j'ai besoin de créer une classe EventArgs personnalisée qui hérite de EventArgs et a mes propriétés personnalisées. Cependant, lorsque je fais cela, j'obtiens l'erreur suivante: Aucune surcharge pour 'Master_Search_Submit' ne correspond au délégué 'System.EventHandler'.

Répondre

2

Vous avez défini votre événement pour utiliser le délégué EventHandler. Un délégué est un pointeur sur une fonction, il définit la signature que doit avoir la méthode répondante. La signature du délégué EventHandler est:

delegate void EventHandler(object sender, EventArgs e); 

Dans .NET 2.0 il y a un délégué EventHandler générique qui vous permet de spécifier les EventArgs type que vous souhaitez utiliser.

public event EventHandler<MyEventArgs> Search_Submit; 

Maintenant, vous pouvez utiliser un gestionnaire d'événements avec la signature

void EventArgs<TArgs>(object sender, TArgs e) where TArgs: EventArgs 

Dans votre cas, ce serait:

void Master_Search_Submit(object sender, MyEventArgs e) 
+0

J'ai modifié ma déclaration d'événement comme vous l'avez mentionné et j'ai modifié mon gestionnaire d'événements pour utiliser ma classe EventArgs personnalisée. Cependant, j'obtiens toujours la même erreur avec la ligne dans la classe Page_Init (voir l'article original pour le code). –

+0

J'ai changé cette ligne pour Master.Search_Submit + = new EventHandler (Master_Search_Submit); et cela a fonctionné correctement. Merci!! –

1

Soit vous devrez passer les vos arguments en tant que EventArgs et le cast dans votre gestionnaire:

private void Master_Search_Submit(object sender, EventArgs e) 
{ 

    MyEventArgs mea = (MyEventArgs)e; 
    //Perform appropriate action... 
} 

Ou vous devez définir un délégué qui attend votre classe args événement personnalisé:

public delegate void MyEventHandler(object sender, MyEventArgs mae); 
public event MyEvent myEvent 

myEvent += new MyEventHandler(Master_Search_Submit); 
0

Vous pouvez utiliser CommandEventHandler au lieu de délégué EventHandler.

Questions connexes