Zasadniczo mam dwa problemy z C# .NET MDI. Możesz pobrać rozwiązanie VS2010, które odtwarza błędy here.Program C# .NET MDI powoduje błędy w programowym ukrywaniu i wyświetlaniu zmaksymalizowanej formy potomnej, a po zmaksymalizowaniu ikona formularza dziecka nie może zostać zmieniona.
1) Kiedy programowo ukrywa i wyświetla ponownie zmaksymalizowaną dziecięcą formę, nie jest ona ponownie zmaksymalizowana prawidłowo i nie jest ani zmaksymalizowana, ani w normalnym stanie.
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;
}
Kiedy forma dziecko jest zmaksymalizowane, a następnie programicaly ukrytych i pokazany ponownie, staje się coś takiego (proszę zauważyć pasek menu - pojawi się okno sterowania tworzą dziecka, ale forma dziecko nie jest zmaksymalizowane):
Na tym etapie forma dziecka nie może być przenoszona. Jednak znalazłem sposób na obejście tego problemu, po prostu pokazując i ukrywając fałszywą formę dziecka, która zmusza właściwą formę dziecka do zmaksymalizowania. Ale to powoduje, że obszar MDI migocze. Próbowano unieważnić, odświeżyć, zaktualizować metody, ale one nie pomagają. Być może są inne sposoby obejścia tego błędu i nie powodują migotania obszaru MDI z atrapą dziecka?
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2) Gdy forma dziecka jest zmaksymalizowana, ikona formularza dziecka jest wyświetlana na pasku menu. Jeśli jednak musisz zmienić ikonę, gdy forma podrzędna jest zmaksymalizowana, ikona na pasku menu nie jest odświeżana (patrz obrazek powyżej). Znalazłem obejście tego, które zasadniczo ukrywa i pokazuje pasek menu. Ikona zostaje odświeżona, ale sprawia, że wszystko poniżej paska menu migocze. Próbowano unieważnić, odświeżyć, zaktualizować metody, ale one nie pomagają. Czy jest jakiś inny sposób, aby pasek menu odświeżył ikonę formularza dziecka?
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
Również zauważyłem, że kiedy forma dominująca jest w normalnym trybie stanu okna (nie zmaksymalizowane) i zmienić szerokość lub wysokość postaci o 1 piksel, formularz dziecko zostanie zmaksymalizowane, jak powinno być i ikona formularza dziecka na pasku menu zostanie poprawnie odświeżona i nie potrzebujesz innego rozwiązania opisanego powyżej. Jeśli zmienię rozmiar formularza programowo, formularz miga o 1 piksel i nie mogę tego zrobić, gdy forma nadrzędna jest zmaksymalizowana. Czy istnieje sposób, w jaki mogę wywołać funkcję odświeżania/odświeżania, która jest wywoływana podczas zmiany rozmiaru formularza i która sprawia, że forma dziecka jest odpowiednio zmaksymalizowana, a ikona na pasku menu odświeżona?
Tak, próbowałem, ale nic się nie zmienia. Myślę, że childForm.Visible = true/false wywołuje te metody. – Povilas
W rzeczywistości powinno być odwrotnie. Hide/Show powinien wtedy ustawić visible na false/true. –