Gestione form

giovedì 11 novembre 2010 - 15.47
Tag Elenco Tags  C#  |  .NET 2.0

Luigi3 Profilo | Junior Member

Scusate la domanda banale: ho un'applicazione con un form di partenza che mi serve per effettuare il login. Se il login va a buon fine, voglio nascondere questo form e aprire una nuova finestra. Ho fatto così:

Gestione formGestione = new Gestione();
formGestione.Show();
this.Visible = false;

Fin qui tutto ok. Adesso sul formgestione, ho messo un pulsante che dovrebbe chiudere il form stesso ( this.Close(); ) e farmi riapparire il form iniziale. Come eseguo questa seconda operazione?

Grazie a tutti.
Luigi

kataklisma Profilo | Senior Member

>Scusate la domanda banale: ho un'applicazione con un form di
>partenza che mi serve per effettuare il login. Se il login va
>a buon fine, voglio nascondere questo form e aprire una nuova
>finestra. Ho fatto così:
>
>Gestione formGestione = new Gestione();
>formGestione.Show();
>this.Visible = false;
>
>Fin qui tutto ok. Adesso sul formgestione, ho messo un pulsante
>che dovrebbe chiudere il form stesso ( this.Close(); ) e farmi
>riapparire il form iniziale. Come eseguo questa seconda operazione?

Hai due possibilità, se hai necessita di ritornare all'istanza creata precedentemente devi passare come parametro al costruttore di Gestione() l'istanza del form di Login, oppure molto semplicemente alla pressione del tasto crei un nuovo form Login e chiudi Gestione :

public Button_Click(..........) { Login lgn = new Login() lgn.Show(); this.close(); }

Per passare l'istanza come parametro e rendere quindi di nuovo visibile il form :

//Form di Login public Button_Click(........) { Gestione gst = new Gestione(this) gst.Show(); this.Visible = false; } ..... ..... //Form di gestione protected Login lgn = new Login(); public Gestione(Login login) //Costruttore { lgn = login; } public Button_Click(...............) { lgn.Visible = true; this.close(); }

Io ti consiglio il primo metodo, molto piu pulito.

Non ce bisogno di portarti dietro l'istanza del form di Login.... ;)

>Grazie a tutti.
Di nulla, Ciao :)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

Luigi3 Profilo | Junior Member

Avevo provato il primo caso, ma mi sembra che non si torni al precedente form reso invisibile, ma si crei una nuova istanza del form login, con il risultato che quando chiudo questo nuovo form di login, l'applicazione è come se fosse ancora aperta, infatti in visual studio il progetto rimane in debug. Allora elimino il tasto di chiusura dal form login e metto un pulsante che mi fa un bel application.exit.

Domanda: ma a livello di processi ogni volta che faccio new login mi crea una nuova istanza? Se non si chiude mai l'applicazione potrei avere dei problemi facendo diverse volte la new di login?

kataklisma Profilo | Senior Member

>Avevo provato il primo caso, ma mi sembra che non si torni al
>precedente form reso invisibile, ma si crei una nuova istanza
>del form login, con il risultato che quando chiudo questo nuovo
>form di login, l'applicazione è come se fosse ancora aperta,
>infatti in visual studio il progetto rimane in debug.
E' tutto normalissimo, il form esiste quindi l'applicazione non è terminata, dovresti chiudere il form di Login e creare una nuova istanza di Gestione.

Per farla breve non dovresti impostare la proprietà Visible a false ma richiamare il metodo Close().

>Allora
>elimino il tasto di chiusura dal form login e metto un pulsante
>che mi fa un bel application.exit.

Personalmente agirei cosi :

Creo un form Login con due Button : Esci e Accedi.
Nel gestore dell'evento Click di Esci richiamerei Application.Exit mentre nel button Accedi creerei una nuova istanza di Gestione e chiuderei con il metodo Close il form di Login.

Se hai necessita nel form Gestione di ritornare al form di login per effettuare una simil-disconnessione, non devi far altro che creare una nuovo istanza di Login e chiudere Gestisci.


>Domanda: ma a livello di processi ogni volta che faccio new login
>mi crea una nuova istanza? Se non si chiude mai l'applicazione
>potrei avere dei problemi facendo diverse volte la new di login?

Non riesco a capire dove vuoi arrivare, l'applicazione non termina finche ci sono oggetti in memoria creati da essa, l'unico modo per essere sicuri di effettuare la chiusura dell'applicazione è richiamare il metodo Exit della classe statica Application.

Ripeto, impostare Visible a false non elimina l'oggetto dalla memoria ma rende semplicemente invisibile il controllo!

;) Ciao!Se hai altre domande sono 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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5