Solución:
En realidad, hay dos cuestiones completamente distintas en juego aquí. Por supuesto, se ven básicamente iguales desde una perspectiva funcional, pero desde una perspectiva de modelo de implementación (como el propio Windows usaría naturalmente) no están relacionados.
Como han respondido otros, puede evitar que su formulario se maximice estableciendo su MaximizeBox
propiedad a false
. Esto quita el WS_MAXIMIZEBOX
estilo en la ventana subyacente del formulario, lo que evita que el administrador de ventanas permita que la ventana se maximice. Deshabilita el cuadro de maximizar en la barra de título de la ventana (el que está entre el cuadro de minimizar y el cuadro de cerrar), deshabilita la opción “Maximizar” en el menú de la ventana / sistema y cualquier otro método para maximizar una ventana que pueda haber olvidado.
Sin embargo, esto no tiene nada que ver con la Ganar+↑ atajo de teclado, que invoca Aero Snap de la misma manera que arrastrar la ventana a la posición mágica que se encuentra en los bordes de la pantalla. El administrador de ventanas, ya sea como resultado de un error o una característica de Aero Snap, aún le permite “maximizar” de manera efectiva las ventanas que de otro modo no deberían maximizarse. Establecer el MaximizeBox
La propiedad no afecta esto, por lo que si realmente desea evitar que el usuario cambie el tamaño de la ventana de esta manera, deberá deshabilitar el efecto de Aero Snap en su ventana.
Desafortunadamente, no existe un método (al menos, que yo sepa) para deshabilitar mediante programación Aero Snap por ventana o por proceso (consulte también esta pregunta relacionada). Si el usuario tiene Aero Snap habilitado, puede asumir que quiere ese comportamiento y las aplicaciones no deben manipularlo. Lo único que puede hacer es desactivar completamente el cambio de tamaño de su ventana. En WinForms, lo hace configurando el FormBorderStyle
propiedad a uno de los siguientes: FormBorderStyle.FixedSingle
, FormBorderStyle.Fixed3D
, o FormBorderStyle.FixedDialog
. Si aún desea que su ventana sea redimensionable de otras maneras, deberá escribir el código para manejarlo manualmente, lo cual no es una tarea particularmente fácil.
Por lo tanto, les animo a que consideren detenidamente si esto es realmente necesario. Todas las demás ventanas no maximizables logran esto simplemente configurando el MaximizeBox
propiedad (o haciendo el equivalente en su marco de interfaz de usuario), lo que significa que aún se pueden maximizar de manera efectiva a través de Aero Snap. Si esto funciona para las ventanas de todos los demás, incluidas las que forman parte del propio Windows, probablemente debería funcionar para usted.
El formulario tiene una propiedad llamada MaximizeBox
– establezca esto en falso.
Con respecto a su segunda pregunta, consulte esta pregunta y sus respuestas para conocer las mejores formas de implementar atajos de teclado en WinForms.
this.FormBorderStyle = FormBorderStyle.FixedSingle;
Esa línea de código evitará que el usuario cambie el tamaño de la ventana.
Además de eso, escondes / deshabilitas el cuadro de maximizar y eso debería hacer lo que pediste.
Para deshabilitar el cuadro de maximizar use este
this.MaximizeBox = false;
Para ocultar el cuadro de maximizar, use esto también
this.MinimizeBox = false;
Si Maximizar y Minimizar se establecen en falso, los botones desaparecen.