Chiusura form owned

venerdì 08 aprile 2011 - 21.31
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

voyager18 Profilo | Junior Member

Ciao a tutti! 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?

kataklisma Profilo | Senior Member

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

voyager18 Profilo | Junior Member

>Spero di esserti stato d'aiuto :)
>
>Buona giornata!
Si grazie non sai quanto mi hai aiutato!! Buona giornata anche a te!

kataklisma Profilo | Senior Member

>Si grazie non sai quanto mi hai aiutato!! Buona giornata anche
>a te!

Di nulla

Se hai bisogno d'aiuto DotNetHell è sempre qui
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5