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.
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: