ciao a tutti, ho bisogno di aiuto per questo problema..
sto preparando una applicazione winform di tipo MDI, la frmMain è in sostanza questo con l'aggiunta dei gestori dei menu
[CODE]
public partial class frmMain : Form
{
private int _childFormNumber = 0;
public int childFormNumber
{
get
{
return _childFormNumber;
}
set
{
_childFormNumber = value;
}
}
public frmMain()
{
InitializeComponent();
}
private void ShowNewForm(object sender, EventArgs e)
{
// Crea una nuova istanza del form figlio.
Form childForm = new frmElenco(childFormNumber);
// Imposta il form come figlio di questo form MDI prima di visualizzarlo.
childForm.MdiParent = this;
childForm.Text += " " + ((childFormNumber++) + 1);
childForm.Show();
}
private void frmMain_Load(object sender, EventArgs e)
{
// al caricamento apre subito una finestra ricerca
ShowNewForm(sender, e);
}
}[/CODE]
mentre la frmElenco
[CODE]
public partial class frmElenco : Form
{
public frmElenco()
{
InitializeComponent();
}
// numero della form intesa come figlia della MDIparent
private int _numeroFiglio = 0;
public int numeroFiglio
{
get
{
return _numeroFiglio;
}
}
public frmElenco(int numero)
{
InitializeComponent();
// assegna il numero interno
_numeroFiglio = numero;
}
// eccetera
}
[/CODE]
ora il problema è che se faccio click sul pulsante di massimizzazione della finestra e poi sulla sua [B]x[/B] per chiuderla, ricevo una eccezione:
[I]System.ObjectDisposedException non è stata gestita
Message="Impossibile accedere a un oggetto eliminato.\r\nNome oggetto: 'Icon'."
Source="System.Drawing"
ObjectName="Icon"[/I]
con il cursore in frmElenco su:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
====> QUi >> base.Dispose(disposing); <=====
}
Avete qualche idea su questo comportamento?
Parlo dell'MDI perchè il problema si presenta anche se leggermente diverso in un altro caso. Dalla frmElenco io apro altre finestre con
frmPersonale frmP = new frmPersonale(matricola, nominativo);
// la scheda deve rimanere all'interno della frmMain e comparire nell'elenco finestre
frmP.MdiParent = this.MdiParent;
frmP.Show();
e se ripeto l'operazione (massimizza e poi chiudi) ottengo che il prog. va in crash con uno sfarfallio continuo, sembra che tenti di ridisegnare la form sottostante e poi quella che ho appena chiuso, ecc.
vi prego una mano.. :(
ps: ovviamente se non clikko mai su 'massimizza' tutto funziona bene, e anche se tolgo la riga
frmP.MdiParent = this.MdiParent;
???
dulcis in fundo non ho problemi se dopo aver massimizzato, prima di chiudere la form la riporto alla dimensione originale!