Quando si programma un'applicazione Windows Form, è necessario recuperare le variabili da una seconda finestra di modulo, ad esempio un modulo di opzioni o una richiesta di ricerca popup.
La maggior parte delle guide là fuori ti diranno che devi aprire il secondo modulo con ShowDialog (), che impedisce all'utente di fare qualsiasi altra cosa fino a quando non hanno chiuso la seconda finestra del modulo. Questo non funzionerà molto bene per una finestra di dialogo Trova / Sostituisci, per esempio. Inoltre non funzionerà molto bene per i moduli popup personalizzati.
Il modo rapido per passare le variabili tra i moduli è l'utilizzo dei delegati. È possibile impostare un eventhandler per l'evento di chiusura del secondo modulo e gestire l'evento nel primo modulo. Ciò consente di acquisire variabili prima che la seconda finestra del modulo sia stata chiusa.
Per questo esercizio, assumeremo che abbiamo due forme:
MainForm
OptionsForm
Supponiamo inoltre di aver fatto clic su una sorta di pulsante che apre OptionsForm con una chiamata al metodo Show (). Ora diamo un'occhiata alla magia:
……. snip…….
OptionsForm theform = new OptionsForm(); theform.Closing += new CancelEventHandler(theform_Closing); theform.Show();
}
private void theform_Closing(object sender, CancelEventArgs e) {
OptionsForm theform = (OptionsForm)sender;
// Grab the variable from the options form. The options form should set this variable before it closes, and the variable should be marked as public. string localvar = theform.thestringvariable;
}
Questo è tutto ciò che c'è da fare.