2016-03-21 10 views
5

Mam formularz Windows, posiadający okienko, które zawiera inną klasę, pochodzącą z Windows Forms. Jest to zawarte w panelu kontrolnym. Zawiera dwa przyciski w sobie.Zdarzenie przechodzenia zdarzenia kontroli nad dzieckiem do formantu nadrzędnego

Chciałbym wydarzenia z kontrolą dziecka mają być przekazywane przez całą drogę do okna nadrzędnego. Na przykład okno podrzędne w okienku ma przycisk Cancel, który powinien go zamknąć. Chciałbym, aby kontrola nadrzędna, czyli główne okno również się zamknęła, ale jak mogę przechwycić zdarzenie click button kontrolki podrzędnej?

mogę zmodyfikować kontrolę dziecka, ale tylko wtedy, gdy nie ma innej drogi do osiągnięcia tego celu w sposób właściwy, to bym raczej jak go uniknąć.

+0

Opis podałeś na pytanie różni się tym, że tytuł. Czego dokładnie chcesz? Czy chcesz podnieść zdarzenie kliknięcia formularza nadrzędnego po kliknięciu kontroli podrzędnej? Czy chcesz zamknąć formularz nadrzędny po kliknięciu przycisku kontroli podrzędnej? Albo coś innego? –

+0

Użytkownik kliknie przyciski obecne w kontrolce podrzędnej - oprócz niektórych zdarzeń w kontrolerze nadrzędnym, niektóre działania muszą zostać podjęte nawet przez kontrolę rodzica, ale nie jestem pewien, czy jest to najlepszy sposób zasygnalizowania rodzicowi kontroli i że jakieś zdarzenie zostało uruchomione na dziecku. Działania te mogą być ogólne, takie jak zamknięcie wszystkich formularzy, do bardziej złożonych. Ale rodzic musi mieć świadomość, że zdarzenie zostało wywołane na kontrolce należącej do kontrolki podrzędnej. – user1173240

+0

Podczas gdy możesz wchodzić w interakcję z rodzicem bezpośrednio od dziecka, lepiej jest poruszyć niektóre wydarzenia przez kontrolę nad dziećmi i zasubskrybować wydarzenia w formie rodzica. –

Odpowiedz

8

Podczas gdy możesz wchodzić w interakcje z rodzicem bezpośrednio od dziecka, lepiej podnieść kilka zdarzeń przez kontrolę nad dziećmi i zasubskrybować wydarzenia w formie rodzica.

Raise wydarzenie od dziecka:

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

Subskrybuj i wykorzystanie wydarzeniem nadrzędny:

//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

Dziękuję za to. Sprawdzę, czy mogę zmodyfikować kontrolę nad dzieckiem. – user1173240

+0

Serdecznie zapraszamy :) –

Powiązane problemy