2016-03-21 22 views
5

Ho un modulo di Windows, con un riquadro, che contiene un'altra classe, derivata da Windows Form. Questo è contenuto come controllo all'interno del riquadro. Contiene due pulsanti al suo interno.Pass click evento del controllo figlio sul controllo genitore

Mi piacerebbe che gli eventi del controllo figlio passino fino alla finestra principale. Ad esempio, la finestra figlio nel riquadro ha un pulsante Cancel, che dovrebbe chiuderlo. Mi piacerebbe che il controllo genitore, cioè la finestra principale, fosse chiuso, ma come posso intercettare l'evento click del pulsante del controllo figlio?

Posso modificare il controllo figlio, ma solo se non c'è altro modo per ottenere ciò in modo corretto, preferisco evitarlo.

+0

La descrizione che hai fornito per la questione è diversa che il titolo. Cosa vuoi esattamente? Vuoi aumentare l'evento click del genitore quando fai clic su Controllo figlio? Vuoi chiudere il modulo genitore quando fai clic su un pulsante nel controllo figlio? O qualcos'altro? –

+0

L'utente fa clic sui pulsanti presenti sul controllo figlio - a parte alcuni eventi sul controllo figlio, alcune azioni devono essere eseguite anche dal controllo genitore, ma non sono sicuro che sia il modo migliore per segnalare al controllo genitore e che qualche evento è stato attivato sul bambino. Queste azioni potrebbero essere generali come chiudere tutte le forme, a quelle più complesse. Ma il genitore deve essere consapevole che un evento è stato attivato su un controllo appartenente al controllo figlio. – user1173240

+0

Mentre è possibile interagire con il modulo padre direttamente dal figlio, è meglio aumentare alcuni eventi tramite controllo figlio e iscriversi per gli eventi in formato padre. –

risposta

8

Mentre è possibile interagire con il modulo padre direttamente dal figlio, è preferibile generare alcuni eventi da controllo figlio e sottoscrivere gli eventi in formato padre.

evento Raise da bambino:

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

Iscriviti e utilizzo evento principale:

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

Grazie per questo. Controllerò se è possibile per me modificare il controllo figlio. – user1173240

+0

Siete i benvenuti :) –

Problemi correlati