Fondamentalement, j'ai deux problèmes avec C# .NET MDI. Vous pouvez télécharger la solution VS2010 qui reproduit les bugs here.Bogues C# .NET MDI lors du masquage par programme et affichage à nouveau d'un formulaire enfant maximisé et lorsqu'il est agrandi, l'icône de la forme enfant ne peut pas être modifiée
1) Lorsque vous masquez et affichez à nouveau une forme enfant agrandie, elle n'est pas agrandie correctement de nouveau et ne devient ni agrandie ni dans un état normal.
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;
}
Lorsque formulaire enfant est maximisée, puis programicaly caché et montré à nouveau, il devient quelque chose comme ça (s'il vous plaît noter la barre de menu - boîte de commande de formulaire enfant apparaît, mais sous forme d'enfant n'est pas maximisé):
À ce stade, la forme de l'enfant ne peut pas être déplacée. Cependant, j'ai trouvé une solution de contournement pour cela, simplement en montrant et en cachant un formulaire enfant fictif, qui force la forme réelle de l'enfant à être correctement maximisée. Mais cela fait scintiller la zone MDI. Essayé Invalider, Actualiser, Mettre à jour les méthodes, mais ils n'aident pas. Peut-être qu'il existe d'autres solutions de contournement pour surmonter ce bug et ne pas faire scintiller la zone MDI avec une forme enfant fictive?
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2) Lorsque la forme enfant est agrandie, l'icône du formulaire enfant est affichée dans la barre de menus. Toutefois, si vous devez modifier l'icône pendant que le formulaire enfant est agrandi, l'icône de la barre de menus n'est pas actualisée (voir l'image ci-dessus). J'ai trouvé une solution de contournement pour cela aussi, qui cache essentiellement et montre la barre de menu. L'icône est rafraichie, mais cela fait clignoter tout ce qui se trouve sous la barre de menu. Essayé Invalider, Actualiser, Mettre à jour les méthodes, mais ils n'aident pas. Existe-t-il un autre moyen de créer une barre de menus pour actualiser l'icône du formulaire enfant?
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
Aussi je remarqué que lorsque le formulaire parent est en mode normal de l'état de la fenêtre (non maximisée) et que vous modifiez la largeur ou la hauteur de la forme par 1 pixel, sous forme d'enfant devient maximisée comme il devrait être et l'icône de la forme enfant sur la barre de menu est rafraichie correctement et vous n'avez pas besoin d'autre solution de contournement que j'ai décrite ci-dessus. Si je change la taille de la forme programicaly, forme le scintillement de 1 pixel et je ne peux pas faire cela, quand la forme parent est maximisée. Existe-t-il un moyen d'invoquer la fonctionnalité repaint/refresh qui est appelée lorsque vous redimensionnez un formulaire et qui rend la forme enfant maximisée correctement et l'icône de la barre de menu actualisée?
Oui, j'ai essayé, mais rien ne change. Je pense que childForm.Visible = true/false appelle ces méthodes. – Povilas
En fait, il devrait être l'inverse. Cacher/Montrer devrait alors rendre visible à faux/vrai. –