web-dev-qa-db-fra.com

Passer l'événement de clic du contrôle enfant au contrôle parent

J'ai un formulaire Windows, ayant un volet, qui contient une autre classe, dérivée de Windows Forms. Ceci est contenu comme un contrôle dans le volet. Il contient deux boutons en lui-même.

Je voudrais que les événements du contrôle enfant soient transmis jusqu'à la fenêtre parent. Par exemple, la fenêtre enfant dans le volet a un bouton Cancel, qui est censé le fermer. J'aimerais que le contrôle parent, c'est-à-dire la fenêtre principale se ferme également, mais comment puis-je intercepter l'événement de clic de bouton du contrôle enfant?

Je peux modifier le contrôle enfant, mais seulement s'il n'y a pas d'autre moyen d'y parvenir correctement, je préfère l'éviter.

12
user1173240

Bien que vous puissiez interagir avec le formulaire parent directement depuis l'enfant, il est préférable de déclencher certains événements par contrôle enfant et de vous abonner aux événements sous forme parent.

Soulever l'événement de l'enfant:

public event EventHandler CloseButtonClicked;
protected virtual void OnCloseButtonClicked(EventArgs e)
{
    var handler = CloseButtonClicked;
    if (handler != null)
        handler(this, e);
}
private void CloseButton_Click(object sender, EventArgs e)
{
    //While you can call `this.ParentForm.Close()` it's better to raise an event
    OnCloseButtonClicked(e);
}

Abonnez-vous et utilisez l'événement dans Parent:

//Subscribe for event using designer or in form load
this.userControl11.CloseButtonClicked += userControl11_CloseButtonClicked;

//Close the form when you received the notification
private void userControl11_CloseButtonClicked(object sender, EventArgs e)
{
    this.Close();
}

Pour en savoir plus sur les événements, consultez:

21
Reza Aghaei