>Ciao a tutti!
Ciao!!
>Vi spiego brevemente la situazione. Ho un form
>principale (form1) da dove apro un secondo form (form2). Per
>aprire il form2 ho scritto questo codice nel form1:
>Form2 f2 = new Form2();
>f2.Owner = this;
>f2.ShowDialog();
>Quando da codice del form2 chiudo il form padre (il form1) il
>form1 si chiude ma il form2 resta aperto. Come posso far chiudere
>il form2 alla chiusura del form1?
Infatti, tutto normale, non c'è nessun errore!
Per chiudere il form padre puoi semplicemente eseguire queste operazioni :
Form2 f2 = new Form2(); //Creo l'istanza
f2.ShowDialog(); //Apro il form in modalità modale
this.Close() //Chiudo il form alla chiusura del form principale
Se utilizzi questa logica spesso e volentieri ti conviene creare una classe base che deriva da form e gestirla per chiudere automaticamente i form (padre-figlio) :
public class FormOwned : Form
{
protected bool _CLS_PRI;
public FormOwned(bool Chiudi_Principale) { _CLS_PRI = Chiudi_Principale;}
public FormOwned(Form Owner, bool Chiudi_Principale)
{
this._CLS_PRI = Chiudi_Principale;
this.Owner = Owner;
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if(_CLS_PRI == true)
if(this.Owner != null)
this.Owner.Close();
}
}
Quindi, ho derivato da "Form", ho eseguito l'override dell'evento Closing in cui grazie a semplici parametri passati al costruttore chiudono o meno il Form padre, ora creiamo un form ed ereditiamo da FormOwned (Sto creando il form Figlio):
public partial class Form2 : FormOwned
{
public Form2(bool Chiudi_Principale)
: base(Chiudi_Principale) { InitializeComponent(); }
public Form2(Form Owner,bool Chiudi_Principale)
: base(Owner, Chiudi_Principale) { InitializeComponent() ;}
}
Ed ora utilizziamo il tutto nel form Padre in un'evento Button_Click :
private void button1_Click(object sender, EventArgs e)
{
Form2 f = new Form2(this,false);
f.ShowDialog();
//Puoi anche utilizzare questo modo qui
//Form2 a = new Form2(true);
//a.ShowDialog(this);
}
Come vedi, passando come parametro il form padre e un valore booleano, il tutto si svolge autonomamente....
Spero di esserti stato d'aiuto :)
Buona giornata!
------------------------------------------
Ignazio Catanzaro
http://blogs.dotnethell.it/swdev/