2010-08-25 12 views
15

Tengo un objeto de formulario de Windows que contiene 3 objetos, una vista de árbol, un cuadro de texto enriquecido y un control de tabulación. No están anclados en la forma de ventanas, pero están anclados (arriba + izquierda).¿Qué me impide cambiar el tamaño (reducción de tamaño) de mi objeto de formulario de Windows?

He escrito el código para cambiar su tamaño cuando se llama a un controlador de eventos de tamaño de formulario, pero parece que solo funciona para aumentar el tamaño del formulario, es decir, no puedo cambiar el tamaño del formulario a un tamaño más pequeño. Esto incluye las veces que primero aumente el formulario de Windows principal y luego intente devolverlo a su tamaño original.

Los tamaños de los tres objetos se ajustan manualmente después de cada tamaño de formulario con el código de abajo:

 treeView1.Height += (this.Height - oldHeight); 
     richTextBox1.Width += (this.Width - oldWidth); 
     tabControl1.Width += (this.Width - oldWidth); 
     tabControl1.Height += (this.Height - oldHeight); 
     oldHeight = this.Height; 
     oldWidth = this.Width; 

Ninguno de los objetos tienen un tamaño mínimo establecido (todos ellos son en 0,0 durante todo el proceso de redimensionamiento)

¿Qué impide que el formulario se redimensione a un tamaño más pequeño?

+0

¿Existe algún motivo por el que no solo utilice el mecanismo de acoplamiento en .NET? Se encargaría de redimensionar para usted. –

+0

El acoplamiento parecía demasiado restrictivo para lo que esperábamos, GUI-wise. La posición de nuestras herramientas de formulario terminó por invalidar la facilidad de implementación para nosotros. – Maixy

Respuesta

18

El autoajuste (que se configuró en el objeto Form principal) impedía que la ventana disminuyera a un tamaño más pequeño que los objetos contenidos en él. A medida que los objetos dentro de la Forma principal aumentaban en cada cambio de tamaño expansivo, la Forma principal no podía contraerse después de un crecimiento de tamaño. Por desactivando Autosize en el objeto de formulario principal, pude recuperar el control total del cambio de tamaño.

+2

Para cualquier otra persona que lea esto, consulte la propiedad "AutoSizeMode", que de forma predeterminada es GrowOnly. Cambiarlo a GrowAndShrink también puede resolver este problema (sin promesas). – ManEatingCheese

0

sólo hay que poner toda su Controls en un Panel y establecer Dock propiedad del Panel a Fill. Creo que funciona incluso con Autosize establecido en verdadero.

1

Haga clic derecho en su Winform en el estudio Visual -> seleccione propiedades ->AutoSize se establecerá verdadera -> cambiarlo a Falso

O

Incluir esta línea en su código

this.AutoSize = false; 
4

Si lo anterior no lo resuelve, verifique que el tamaño mínimo del formulario no esté configurado en un valor mayor al que necesita.

0

Puede haber una forma más de corregir el comportamiento de un formulario que no se puede cambiar de tamaño mediante la selección normal del mouse.

En relación con la discusión anterior, descubrí [usando VB.net en VS2010] que uno de mis formularios estándar de Windows no cambiaría el tamaño con la selección del mouse. Es como si el FormBorderStyle se configurara en una forma de "Fixed". Incluso el cambio de FormBorderStyle a SizableToolWindow no proporcionó el comportamiento esperado del ratón.

Éstos son algunos parámetros de forma de las propiedades de diseño de formularios: de tamaño automático: falsa AutoSizeMode: growonly DoubleBuffered: verdadera Habilitado: verdadera FormBorderStyle: Considerables imeMode: NoControl Bloqueado: falsa AutoScaleMode: Fuente AccessibleRole: predeterminado

Todos los valores de la propiedad de código visible o de este formulario, y todos sus ajustes de propiedad del Diseñador también, eran idénticos a otros formularios en el mismo proyecto que permitirían cambiar el tamaño del mouse correctamente. Limpiar la solución y Reconstruirla tampoco solucionó el problema de la forma congelada. Al hacer clic en Maximizar funcionó, también lo hizo hacer clic en Minimizar. El tamaño del formulario se puede establecer por código como se esperaba. Solo el cambio de tamaño del mouse del formulario no funcionó correctamente.

descubrí que el cambio de tamaño de selección de ratón deseada podría ser de nuevo activado configurando, en el código, estableciendo el parámetro:

myForm.AutoScaleMode = Windows.Forms.AutoScaleMode.Inherit

Este parámetro tenía se ha establecido en "fuente" en el diseño del formulario, que también se usó en otras formas que funcionaron correctamente.

Entonces ... extrañamente ... cambiarlo de nuevo. Heredar en ".Fuente" en el código también permite que el formulario cambie el tamaño correctamente.

Ese ajuste en el código (ya sea para Heredar, o para .Fuente) parece ser el elemento crítico para corregir el problema de redimensionamiento de Forma, en este caso. Parece que hay parámetros ocultos que el sistema no muestra al usuario, que de alguna manera interfieren con la operación esperada de un formulario.

+0

Wordy y poco claro, pero en segundo plano y en comparación con otros, no es exactamente VLQ. –

Cuestiones relacionadas