Pregunta

Tengo un formulario que es un mdicontainer y tiene una tira de menú en la parte superior. Agrego un formulario infantil a mi contenedor mdi y cuando maximizo el niño, se maximiza sobre el menustrip. Quiero saber cómo limitar al niño al máximo por debajo de la menustrip. Cualquier ayuda sería apreciada.

¿Fue útil?

Solución

Su forma secundaria se está maximizando de la manera en que se supone que las formas secundarias se maximizan en MDI. Realmente no cubre la tira de menú del formulario principal, en realidad está fusionando su propia tira de menú con la del formulario principal.

Para hacer que el formulario secundario ocupe solo el área secundaria disponible en el elemento primario MDI (y no fusionar su menú con el menú principal), coloque algo como este código en el evento de cambio de tamaño del formulario secundario:

if (this.WindowState == FormWindowState.Maximized)
{
    this.WindowState = FormWindowState.Normal;
    this.Size = this.MdiParent.ClientSize;
    this.Location = new Point(0, 0);
}

lo que evitará que la ventana secundaria se maximice realmente.

Digo " algo como este código " porque este fragmento no funciona exactamente bien. La propiedad ClientSize del formulario principal proporciona el tamaño total del formulario, mientras que usted desea usar el tamaño del área del cliente MDI. No sé cómo obtener eso, y aparentemente no es muy fácil. Vea esta pregunta:

Tamaño / ubicación del área del cliente MDI de Winforms

Otros consejos

Puede establecer la propiedad MaximumSize para que no llene todo el contenedor.

Sé que esta es una pregunta antigua, pero me encontré con esto en un proyecto antiguo en el que estoy trabajando, así que aquí hay una respuesta para cualquiera que vea esto. Establecer el Dock en DockStyle.Fill le dará el comportamiento que desea.

Solo ten en cuenta que la ventana actuará / parecerá extraña si intentas reposicionar o cambiar el tamaño de la ventana mientras tenga ese DockStyle.

Para lograr esto, me suscribí al evento de cambio de tamaño de la ventana del cliente MDI y si la ventana se había maximizado, establecía su DockStyle en Relleno, configuraba FormBorderStlye en FixedDialog (para evitar el cambio de tamaño), y establecía el estado de la ventana en normal para evitar que se produzca la maximización.

Para evitar que el usuario mueva la ventana mientras está en este " estado maximizado " Simplemente anulé el método WndProc y lo manejé cuando la ventana se estaba moviendo (SC_MOVE) y realicé una devolución para evitar que la acción tenga efecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top