Fondamentalmente sto riscontrando due problemi con MDI C# .NET. È possibile scaricare la soluzione VS2010 che riproduce bug here.C# .NET Bug MDI quando si nasconde e mostra di nuovo un modulo figlio massimizzato e quando ingrandita, l'icona del modulo figlio non può essere modificata
1) Quando si nasconde e mostra di nuovo una forma di bambino massimizzata, non viene ingrandita correttamente correttamente e non diventa né ingrandita né in stato normale.
childForm = new Form();
childForm.Text = "Child Form";
childForm.MdiParent = this;
...
private void showButton_Click(object sender, EventArgs e)
{
childForm.Visible = true;
}
...
private void hideButton_Click(object sender, EventArgs e)
{
childForm.Visible = false;
}
Quando form figlio è ingrandita, quindi programicaly nascosti e mostrati ancora una volta, diventa qualcosa di simile (si prega di notare la barra dei menu - appare scatola di controllo del form figlio, ma form figlio non è ingrandita):
In questa fase, la forma del bambino non può essere spostata. Tuttavia, ho trovato una soluzione per questo, semplicemente mostrando e nascondendo un modulo figlio fittizio, che costringe il vero modulo figlio a diventare correttamente massimizzato. Ma questo rende l'area MDI sfarfallio. Provati metodi Invalidate, Refresh, Update, ma non aiutano. Forse ci sono altri metodi per ovviare a questo errore e non creare uno sfarfallio dell'area MDI con un modulo figlio fittizio?
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2) Quando la forma figlio è ingrandita, l'icona del modulo figlio viene visualizzata sulla barra dei menu. Tuttavia, se è necessario modificare l'icona mentre il modulo figlio è ingrandito, l'icona sulla barra dei menu non viene aggiornata (vedere l'immagine sopra). Ho trovato una soluzione anche per questo, che fondamentalmente nasconde e mostra la barra dei menu. L'icona viene aggiornata, ma rende tutto sfocato sotto la barra dei menu. Provati metodi Invalidate, Refresh, Update, ma non aiutano. C'è un altro modo per rendere la barra dei menu per aggiornare l'icona del modulo figlio?
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
Inoltre ho notato che quando form padre è in modalità finestra di stato normale (non ingrandita) e si modifica la larghezza o l'altezza del modulo di 1 pixel, form figlio viene massimizzata come dovrebbe essere e l'icona del modulo figlio sulla barra dei menu viene aggiornata correttamente e non hai bisogno di altre soluzioni alternative che ho descritto sopra. Se modifico la dimensione del modulo in modo programmatico, il form sfarfallio di 1 pixel e non posso farlo quando la forma genitoriale è ingrandita. C'è un modo come potrei invocare la funzionalità di ridisegno/aggiornamento che viene chiamata quando ridimensionate un modulo e che rende la forma del bambino ingrandita correttamente e l'icona sulla barra del menu aggiornata?
Sì, ho provato, ma non cambia nulla. Penso che childForm.Visible = true/false chiami quei metodi. – Povilas
In realtà dovrebbe essere il contrario. Hide/Show dovrebbe quindi essere visibile a false/true. –