web-dev-qa-db-fra.com

Comment déclencher un événement dans un contrôle utilisateur et l'attraper dans la page principale?

J'ai un UserControl et je dois informer la page parent qu'un bouton dans le UserControl a été cliqué. Comment déclencher un événement dans le UserControl et l'attraper sur la page principale? J'ai essayé d'utiliser static, et beaucoup m'ont suggéré d'aller à des événements!

48
user677607

Consultez Bulle d'événements - http://msdn.Microsoft.com/en-us/library/aa719644%28vs.71%29.aspx

Modifier pour ajouter un exemple rapide: (et modification supplémentaire pour améliorer la mise en forme)

Contrôle utilisateur

public event EventHandler StatusUpdated;

private void FunctionThatRaisesEvent()
{
    //Null check makes sure the main page is attached to the event
    if (this.StatusUpdated != null)
       this.StatusUpdated(this, new EventArgs());
}

Page principale/formulaire

public void MyApp()
{
     //USERCONTROL = your control with the StatusUpdated event
     this.USERCONTROL.StatusUpdated += new EventHandler(MyEventHandlerFunction_StatusUpdated);
}

public void MyEventHandlerFunction_StatusUpdated(object sender, EventArgs e)
{
         //your code here
}
86
Jemes

Ajoutez simplement un événement sous votre contrôle:

public event EventHandler SomethingHappened;

et élevez-le lorsque vous souhaitez informer le parent:

if(SomethingHappened != null) SomethingHappened(this, new EventArgs);

Si vous avez besoin d'EventArgs personnalisés, essayez EventHandler<T> à la place avec T étant un type dérivé de EventArgs.

7
Zebi

Ou si vous cherchez une solution plus découplée, vous pouvez utiliser un modèle d'éditeur/abonné de messagerie tel que MVVM Light Messenger ici

1
Phil Murray