2010-06-25 18 views
5

Ho una piccola applicazione che crea avvisi ogni volta che viene effettuata una modifica a un database. Ho alcune opzioni nel modulo di avviso che si apre.
Una delle opzioni apre un altro modulo (un modulo figlio) che chiede all'utente ulteriori informazioni.Chiusura di una forma da un'altra forma?

Quando il modulo figlio ottiene le informazioni necessarie dall'utente, voglio che venga chiuso così come il modulo padre. Finora, so solo come chiudere il modulo figlio, ma non la forma genitore.

Parent form > Opens child form 
Child gathers information > User clicks ok in child > child closes, parent closes 

^questo è ciò che voglio

io semplicemente non hanno il potere del cervello di pensare a come comunicare attraverso forme per realizzare la chiusura del form padre.

Qualsiasi aiuto sarebbe molto apprezzato. In realtà, sarebbe molto apprezzato. Se potessi imparare come comunicare tra loro i miei moduli, potrei fare un sacco di danni (in senso buono 8D).

risposta

1

Prova questa nel form padre:

using (var childForm = new ChildForm()) 
{ 
    if (childForm.ShowDialog() == DialogResult.OK) 
    { 
     Close(); 
    } 
} 

Il modulo bambino dovrebbe restituire un DialogResult facendo clic sui pulsanti (OK o Annulla) e/o impostazione delle proprietà AcceptButton e CancelButton nel designer.

+0

Se il modulo figlio restituirà molte informazioni al modulo padre, preferisco che la classe del modulo figlio definisca un metodo statico che crea un modulo figlio, esegue ShowDialog su di esso, copia le informazioni appropriate da esso in un dato di ritorno oggetto, distrugge il modulo e restituisce i dati. In tale scenario, il costruttore del modulo figlio può essere protetto o, se la classe non è ereditabile, privata. – supercat

+0

Passaggio di un oggetto business nel modulo figlio e lasciare che apporti modifiche all'oggetto o, in genere, esporre i dati come proprietà sul modulo figlio. –

6

Nella forma genitore, si può fare qualcosa di simile:

ChildForm f = new ChildForm(); 
f.FormClosed += (o,e) => this.Close(); 
f.Show(); 
+0

@Justin, sto ricevendo un delegato() non può accettare l'errore 0 parametri ... – sooprise

+0

@BFree, la tua soluzione ha funzionato perfettamente, grazie mille !!! : D – sooprise

+1

Ciò non consente all'utente di cancellare qualsiasi cosa stiano facendo nel modulo figlio. –