Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Errore seconda apertura Form
lunedì 30 gennaio 2006 - 22.02
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Juwan
Profilo
| Junior Member
76
messaggi | Data Invio:
lun 30 gen 2006 - 22:02
Salve ragazzi ho un problema con l'apertura di un form. Ho un'applicazione che alla pressione di un pulsante visualizza un altro form, il problema è questo, quando chiudo il secondo form aperto dalla pressione del pulsante e successivamente, nella stessa applicazione, cerco di aprire per la seconda volta questo form, viene visualizzato un errore che dice: Cannot access a disposed object, object name 'form2'. Ho provato allora a gestire l'evento di chiusura di questo form, inserendo in tale metodo l'evento dispose, per liberare eventuali risorse, ma questo problema rimane lo stesso, da cosa può dipendere questo errore? Questo comunque è il codice in questione
public void settaggi_click(object sender, EventArgs e)
{
try
{
Form2 frm2 = new Form2();
frm2 .Show();
frm2 .Refresh();
frm2 .Activate();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.StackTrace);
}
}
public void setting_FormClosed(object sender, EventArgs e)
{
this.frm2.Hide();
this.frm2.Dispose();
}
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
lun 30 gen 2006 - 22:09
Prova a mettere:
Form2 frm;
in alto tra le variabili visibili a livello di classe
e poi
frm = new Form2();
dove lo devi usare.
Juwan
Profilo
| Junior Member
76
messaggi | Data Invio:
lun 30 gen 2006 - 22:18
Scusa ho sbagliato a scrivere il codice, l'oggetto frm2, è già un oggetto globale. Però se faccio come dici tu, ogni volta che il metodo viene chiamato, viene creata un'instanza dell'oggetto frm2, e questo comporta dei problemi alla mia applicazione. C'è forse un'altro modo per risolvere il mio problema?
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
lun 30 gen 2006 - 22:24
Semplicemente devi "ricordarti" di avere già alzato frm2.
- Puoi farlo impostanto owner e ciclando poi sulla collection owner
- definendo una variabile bool (già attivata form2)
- usando una collection che memorizza i "tipi" form già alzati
.. ci sono anche altri modi
Juwan
Profilo
| Junior Member
76
messaggi | Data Invio:
lun 30 gen 2006 - 22:43
Purtroppo per la mia applicazione, porta troppi problemi instanziare l'oggetto frm2 all'interno di quel metodo. Però la cosa più importante è che mi interessa sapere, il motivo per cui viene segnalato l'errore Cannot access a disposed object, quando tento di aprire per la seconda volta questo form
Cteniza
Profilo
| Guru
1.509
messaggi | Data Invio:
lun 30 gen 2006 - 23:49
Semplicemente che dopo che l'hai chiuso non puoi più accedervi.
Se ti serve devi usare un'altra volta new
Juwan
Profilo
| Junior Member
76
messaggi | Data Invio:
lun 30 gen 2006 - 23:57
Però scusa, io l'oggetto form non l'ho chiuso, l'ho nascosto utilizzando il metodo Hide() , quindi in teoria ancora dovrebbe essere possibile usarlo, o sbaglio?
mantis
Profilo
| Newbie
1
messaggi | Data Invio:
sab 4 feb 2006 - 02:20
Allora, semplicemente da uanto visto dal tuo codice tu usi il metodo Dispose(). Eliminalo ed usalo solo quando il form non ti serve più effettivamente, inoltre gestisci il metodo di chiusura dello stesso (creato automaticamente in visual studio) impostando il parametro booleano a false e nascondendolo.
Il tuo codice potrebbe essere modificato in questo modo:
//Dichiarazione variabili globali della classe
private Form x;
public void visualizzaForm()
{
if (x == null) x = new Form();
x.show();
}
-------------------------------------------
Tutto chiaro?
Dipasoft
Torna su
Stanze Forum
Elenco Threads
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 !