Básicamente tengo dos problemas con C# .NET MDI. Puede descargar la solución VS2010 que reproduce los errores here.C# .NET MDI se equivoca al ocultar por programación y muestra de nuevo un formulario maximizado y cuando se maximiza, el icono de formulario secundario no se puede cambiar
1) Cuando se oculta de forma programada y se vuelve a mostrar un formulario secundario maximizado, no se maximiza correctamente de nuevo y no se maximiza ni se encuentra en estado 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;
}
Cuando se maximiza formulario secundario, entonces programicaly ocultos y muestra una vez más, se convierte en algo como esto (por favor, observe la barra de menús - Aparece el cuadro de control del formulario secundario, pero formulario secundario no está maximizada):
En esta etapa, no se puede mover la forma del niño. Sin embargo, encontré una solución para eso, simplemente mostrando y ocultando una forma de niño falso, lo que obliga a que la forma real del niño se maximice adecuadamente. Pero esto hace que el área MDI parpadee. Intentó Invalidar, Actualizar, Actualizar métodos, pero no ayuda. Tal vez haya otras soluciones para superar este error y no para hacer que el área MDI parpadee con la forma de un hijo ficticio.
private void workaround1Button_Click(object sender, EventArgs e)
{
dummyForm.Visible = true;
dummyForm.Visible = false;
}
2) Cuando se maximiza el formulario secundario, el icono del formulario secundario se muestra en la barra de menú. Sin embargo, si tiene que cambiar el ícono mientras se maximiza el formulario secundario, el ícono en la barra de menú no se actualiza (vea la imagen de arriba). Encontré una solución para eso también, que básicamente oculta y muestra la barra de menús. Icon se actualiza, pero hace que todo lo que está debajo de la barra de menú parpadee. Intentó Invalidar, Actualizar, Actualizar métodos, pero no ayuda. ¿Hay alguna otra forma de hacer que la barra de menú actualice el icono del formulario secundario?
private void workaround2Button_Click(object sender, EventArgs e)
{
menuStrip.Visible = false;
menuStrip.Visible = true;
}
También he notado que cuando la forma de los padres está en modo de estado de ventana normal (no maximizado) y se cambia la anchura o la altura de la forma por 1 píxel, la forma niño se maximiza como debe ser y El ícono del formulario hijo en la barra de menú se actualiza correctamente y no necesita otra solución que describí anteriormente. Si cambio el tamaño del formulario de forma programática, los parpadeos de forma en 1 píxel y no puedo hacer eso, cuando se maximiza el formulario principal. ¿Hay alguna manera de invocar la funcionalidad de volver a pintar/actualizar que se llama cuando se cambia el tamaño de un formulario y que hace que la forma infantil se maximice correctamente y se actualice el icono en la barra de menú?
Sí, lo han intentado, pero nada cambia. Creo que childForm.Visible = true/false llama a esos métodos. – Povilas
En realidad, debería ser al revés. Hide/Show debería establecerse como visible a falso/verdadero. –