[C#] MDI e massimizzazione form

venerdì 09 novembre 2007 - 10.36

Pokino Profilo | Junior Member

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