2016-03-21 12 views
5

Ich habe ein Windows-Formular mit einem Bereich, der eine andere Klasse enthält, die von Windows Forms abgeleitet ist. Dies ist als Steuerelement innerhalb des Bereichs enthalten. Es enthält zwei Schaltflächen in sich.Übergeben Sie das Click-Ereignis des untergeordneten Steuerelements an das übergeordnete Steuerelement

Ich möchte, dass die Ereignisse des untergeordneten Steuerelements vollständig an das übergeordnete Fenster übergeben werden. Zum Beispiel hat das untergeordnete Fenster im Fenster eine Schaltfläche Cancel, die es schließen soll. Ich möchte, dass die übergeordnete Steuerung, d. H. Das Hauptfenster, ebenfalls geschlossen wird, aber wie kann ich das Klickereignis der Schaltfläche des untergeordneten Steuerelements abfangen?

Ich kann die Kindersteuerung ändern, aber nur, wenn es keinen anderen Weg gibt, dies auf die richtige Weise zu erreichen, würde ich es lieber vermeiden.

+0

Die Beschreibung, die Sie für die Frage vorgesehen ist unterschiedlich, dass der Titel. Was genau willst du? Möchten Sie Click-Ereignis des übergeordneten Formulars auslösen, wenn Sie auf untergeordnete Kontrolle klicken? Möchten Sie das übergeordnete Formular schließen, wenn Sie auf eine Schaltfläche im untergeordneten Steuerelement klicken? Oder etwas anderes? –

+0

Der Benutzer wird auf Schaltflächen klicken, die auf dem untergeordneten Steuerelement vorhanden sind - abgesehen von einigen Ereignissen auf dem untergeordneten Steuerelement müssen einige Aktionen auch von dem übergeordneten Steuerelement ausgeführt werden, aber ich bin nicht sicher, ob die beste Möglichkeit ist, dem übergeordneten Steuerelement zu signalisieren dass ein Ereignis für das Kind ausgelöst wurde. Diese Aktionen können allgemeine sein, wie etwa alle Formulare schließen, bis hin zu komplexeren. Der Eltern muss jedoch bewusst sein, dass ein Ereignis für ein Steuerelement ausgelöst wurde, das zum untergeordneten Steuerelement gehört. – user1173240

+0

Während Sie direkt vom untergeordneten Element aus mit dem übergeordneten Formular interagieren können, ist es besser, einige Ereignisse nach untergeordneten Steuerelementen zu erhöhen und die Ereignisse im übergeordneten Formular zu abonnieren. –

Antwort

8

Während Sie mit Eltern-Formular direkt von Kind interagieren können, ist es besser, einige Ereignisse von Kind-Steuerelement zu erhöhen und für die Ereignisse in übergeordneter Form zu abonnieren.

Raise Ereignis von Child:

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); 
} 

abonnieren und Verwendung Ereignis in 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(); 
} 
+0

Vielen Dank dafür. Ich werde prüfen, ob es mir möglich ist, die Kinderkontrolle zu ändern. – user1173240

+0

Sie sind herzlich willkommen :) –

Verwandte Themen