26 messaggi dal 22 dicembre 2011
Salve, ho una finestra principale che apre altre finestre secondarie. Come faccio a controllare lo stato di una di queste finestre figlie?in particolare mi serve sapere se la finestra è stata chiusa oppure no.
5.610 messaggi dal 09 febbraio 2002
Contributi
ciao,
subito dopo aver istanziato la finestra figlia, sottoscrivi il suo evento Closed, così potrai eseguire del codice nel momento stesso in cui verrà chiusa.

ciao

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
26 messaggi dal 22 dicembre 2011
e non c'è qualche metodo che mi permette di testare lo stato di una finestra?devo necessariamente gestire l'evento closed nelle figlie e settare dei flag di chiusura nella finestra padre?
5.610 messaggi dal 09 febbraio 2002
Contributi
beh, anche le finestre sono oggetti come tanti altri. Se non mantieni un riferimento all'istanza non puoi sapere se l'oggetto è stato già distrutto o ancora esiste.

pippo87 ha scritto:

devo necessariamente [...] settare dei flag di chiusura nella finestra padre?

No, se hai tanti tipi diversi di finestre figlie potresti delegare questo compito ad una classe "manager" che gestisca le loro istanze.
Leggi questo thread, forse ti può aiutare. Un altro utente ha posto un quesito simile qualche giorno fa.
http://forum.aspitalia.com/forum/post/386068/Evitare-Apertura-Form.aspx

A quella classe potresti aggiungere un metodo .Exists<T>() che ti ritorna un bool ad indicare se un'istanza già esiste o no.

ciao

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
26 messaggi dal 22 dicembre 2011
Io ho riferimenti alle istanze delle finestre figlie (tutte dello stesso tipo) nella classe padre, non so quale medodo invocare su di esse per testare lo stato.
5.610 messaggi dal 09 febbraio 2002
Contributi
Ciao, quando l'utente chiude la finestra, essa viene sottoposta a .Dispose(). Non dovresti mantenere dei riferimenti ad istanze di cui è stato fatto il Dispose() perché questa è una potenziale causa di memory leak.
Per questo ti consigliavo di sottoscrivere l'evento Closed, perché era anche una buona occasione per dereferenziare l'oggetto, cioè settare la variabile a null.

Se continui ad usare la referenza anche dopo l'invocazione del .Dispose incapperai in eccezioni di tipo ObjectDisposedException.

Anzi, volendo proprio sfruttare questo sistema potresti fare una cosa del genere, che però non ti consiglio:
try{
finestra.Show();
} catch (ObjectDisposedException exc){
 //la finestra era stata chiusa
}


Il punto è questo: se devi compiere delle operazioni anche DOPO che l'utente ha chiuso la finestra, ad esempio per copiarti delle informazioni che aveva digitato in essa, puoi sottoscrivere l'evento Closing ed, eventualmente, impedire la chiusura della finestra se proprio non vuoi che venga distrutta. Potresti rendere la finestra invisibile all'utente ma resterebbe comunque presente in memoria nel caso avessi bisogno di mostrarla di nuovo più tardi.

ciao
Modificato da BrightSoul il 10 gennaio 2012 23.02 -

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC