Errore seconda apertura Form

lunedì 30 gennaio 2006 - 22.02

Juwan Profilo | Junior Member

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

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

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

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

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

Semplicemente che dopo che l'hai chiuso non puoi più accedervi.
Se ti serve devi usare un'altra volta new


Juwan Profilo | Junior Member

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

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
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5