Tengo una situación en la que sería beneficioso para mí permitir que el usuario modifique el tamaño de mi formulario de Windows, pero solo verticalmente. Después de algunas búsquedas, parece que no hay mucho sobre este tema en particular. ¿Es posible?Ventanas de tamaño variable verticalmente (solo) en C#
Respuesta
Debe establecer las propiedades MinimumSize
y MaximumSize
del formulario en dos tamaños con diferentes alturas pero con el mismo ancho.
Si no desea que el cursor de cambio de tamaño horizontal a aparecer en absoluto, que necesita para manejar el mensaje WM_NCHITTEST
, así:
protected override void WndProc(ref Message m) {
base.WndProc(ref m);
switch (m.Msg) {
case 0x84: //WM_NCHITTEST
var result = (HitTest)m.Result.ToInt32();
if (result == HitTest.Left || result == HitTest.Right)
m.Result = new IntPtr((int)HitTest.Caption);
if (result == HitTest.TopLeft || result == HitTest.TopRight)
m.Result = new IntPtr((int)HitTest.Top);
if (result == HitTest.BottomLeft || result == HitTest.BottomRight)
m.Result = new IntPtr((int)HitTest.Bottom);
break;
}
}
enum HitTest {
Caption = 2,
Transparent = -1,
Nowhere = 0,
Client = 1,
Left = 10,
Right = 11,
Top = 12,
TopLeft = 13,
TopRight = 14,
Bottom = 15,
BottomLeft = 16,
BottomRight = 17,
Border = 18
}
el minsize/maxsize es mucho más limpio que mi solución, +1 de mí ... –
No puedo creer que no haya pensado en esto ... ¡Muy bien! ¡Y gracias por los detalles de WndProc de ocultar ese cursor de tamaño! – Ben
Solo un comentario ... ¿no debería hacer que HitTest.Left y .Right devuelvan None y not Caption? Usar Caption hace que la ventana se pueda arrastrar en esos lugares, ¿no? – MarqueIV
Establecer el tamaño máximo & min para el ancho de la forma solo
mucho más limpio que mi solución, +1 de mí ... –
Asegúrese de hacerlo en el evento Load, no en el constructor. O la escala automática recortará el contenido del formulario. –
Si deja el componente de altura de las propiedades MinimumSize y MaximumSize en 0 pero establece un ancho, limitará la ventana a su altura mínima. Las restricciones MinimumSize y MaximumSize solo se ignoran cuando ambos componentes son cero; si el conjunto de uno y el otro se dejan en cero, aplicará ambos componentes literalmente. – Dathan
sólo una idea ...
public partial class Form1 : Form {
int _width;
public Form1() {
_width = this.Width;
InitializeComponent();
}
protected override void OnResize(EventArgs e) {
this.Width = _width;
base.OnResize(e);
}
}
EDITAR: Tenga en cuenta que las soluciones min/max tamaño funcionan mucho mejor que este truco :)
Pásame a ello. +1 Para otras soluciones, no estoy seguro de que sea posible tener un ancho máximo/mínimo sin establecer también una altura máxima/mínima. Esta solución te permitirá cambiar el tamaño del formulario, pero volverá a su ancho original. –
@George: puede establecer un mínimo pequeño y un máximo muy grande. – SLaks
trabajado para mí +1 – cihata87
Sí, es posible. Simplemente configure su forma.MinimumSize.Width = form.MaximumSize.Width = 100 (o el ancho que desee).
No puede asignar el ancho directamente como form.MinimunSize o form.MaximumSize devuelve un tipo de valor, no una referencia. –
No fue una muestra de código de trabajo, solo una idea de lo que debería configurarse. –
No entiendo cómo las personas olvidan usar la lógica cuando intentan entender una declaración simple. +1 –
Deje que el FormBorderStyle a MaximumSize dimensionable y fijar y MinimumSize = new Tamaño (this.width, 0)
Corrección:
this.MinimumSize = new Size(this.Width, 0);
this.MaximumSize = new Size(this.Width, Int32.MaxValue);
para evitar el efecto "caucho de bandas" de @ la solución de orsogufo:
public Form1()
{
InitializeComponent();
this.MinimumSize = new Size(500, 0);
this.MaximumSize = new Size(500, Screen.AllScreens.Max(s => s.Bounds.Height));
}
no va a ajustar correctamente su altura máxima para dar cabida a una pantalla más grande si cambia el tamaño de los s cree límites, pero para los tamaños de pantalla estáticos funciona muy bien.
- 1. ¿Cómo cambiar el tamaño SOLO horizontal o verticalmente con jQuery UI de tamaño variable?
- 2. matrices de tamaño variable en C
- 3. ¿Cómo puedo dividir horizontalmente varias ventanas divididas verticalmente en Vim?
- 4. C++ prohíbe el arreglo de tamaño variable
- 5. ¿Cómo hacer que NSWindow solo se pueda cambiar de tamaño verticalmente?
- 6. ¿Cómo declarar una matriz 2D de tamaño variable en C?
- 7. ¿Controles WPF de tamaño variable?
- 8. ¿Es posible la variable solo de pila en C++?
- 9. al obtener el tamaño en píxeles de la pantalla en ventanas forman en C#
- 10. fnmatch para ventanas en C?
- 11. Inicialización matriz de tamaño variable en Java
- 12. ¿Es posible emitir en múltiples ventanas de terminal dentro de un solo programa C?
- 13. SetWindowPos en C# para mover ventanas
- 14. inicializar una matriz C multidimensional de tamaño variable a cero
- 15. Widget de tamaño variable Android
- 16. Cómo voltear ventanas en vim?
- 17. Objective-C: ¿La variable de solo lectura no es asignable?
- 18. C# devuelve una variable como solo lectura de get; conjunto;
- 19. Vim como una plataforma para tomar notas: salta a la etiqueta en ventanas divididas verticalmente
- 20. Aero Glass Bordes de Ventanas Emergentes en C#
- 21. jQuery UI error de tamaño variable (?) En Firefox y IE
- 22. Java Swing: ¿Cómo puedo cambiar el tamaño de una fila en un diseño de cuadrícula y permitir que cambie el tamaño dinámicamente solo horizontalmente y no verticalmente?
- 23. ¿Cómo forzo a JScrollPane a desplazarse solo verticalmente?
- 24. Hacer que Java JScrollpane solo se desplace verticalmente
- 25. minimizar todas las ventanas abiertas en C#
- 26. JScrollpane cambio de tamaño con contenido de tamaño variable
- 27. Obtener ubicación y el tamaño de todas las ventanas abiertas utilizando .NET (C#)
- 28. multilingüe uso de las ventanas de C#
- 29. ¿Qué significa "variable | variable" en C++?
- 30. Cómo implementar matrices de tamaño variable en Ir
@Will: Eso depende de lo que se muestre el formulario. Hay (algunos) casos donde esta es una buena idea. – SLaks
@slaks nunca lo ha visto. He visto muchas aplicaciones que creen que saben lo grande que debe ser una forma. Visual Studio todavía tiene algunos de ellos. Estas formas tienen una cosa en común: las personas que las crearon estaban equivocadas sobre el tamaño "correcto". En todos los casos, deje que el usuario decida cuál es el tamaño del formulario o arriesgarse a la condena. (Divulgación completa, me arriesgo a la condena. Estoy avergonzado.) – Will
@Will: ¿Qué hay de Virtual PC 2007? – SLaks