2012-06-15 8 views
10

Este problema está mejor demostrado que explicado, así que configuré un git repo con el proyecto Visual Studio 2010 que se usará para ver el problema en acción.Los controles acoplados colocados dentro de TableLayout no son automáticamente más pequeños que su tamaño de creación

Tengo un proyecto donde agregué un control ComboBox (comboField) a un control TableLayout (tableLayoutPanel1). Establecí la propiedad Dock del ComboBox en Fill para que rellene la celda del control TableLayout en el que se ha colocado. También establecí la propiedad Dock del control TableLayout en Fill para que llene el formulario que ha sido colocado. El ancho del ComboBox es actualmente de 193 píxeles.

Cuando ejecuto el formulario y aumente su ancho, el tamaño del ComboBox aumenta, como se esperaba. Cuando reduzco el tamaño del formulario, el ComboBox se reduce en tamaño hasta que alcanza su tamaño original (193 píxeles). En ese punto, el ancho del ComboBox no disminuirá más, lo que resulta en el lado derecho del control que se recorta. Esto es contrario a lo que esperaría: el ancho del ComboBox disminuirá a cero, dado que no se ha especificado MinimumSize. Tampoco se ha especificado MinimumSize para ninguno de los otros controles en el formulario, como el control TableLayout.

En caso de que sea pertinente, la anchura de la primera columna de la TableLayout ha se establece en un tamaño Absolute de 100 píxeles, mientras que la anchura de la segunda columna de la TableLayout se ha establecido en AutoSize.

¿Alguien puede arrojar alguna luz sobre por qué esta forma se está comportando en contra de mis expectativas y aconsejarme sobre cómo puedo hacer que funcione de la manera que yo quiero? Cualquier ayuda sería muy apreciada.

Respuesta

4

El panel tablelayout parece almacenar el tamaño inicial de los controles y nunca los hace más pequeños independientemente del acoplamiento, el anclaje o cualquier otro valor como AutoSizeMode.GrowAndShrink. En el diseñador, el tamaño del control acoplado siempre se almacenará, por lo que el método más fácil que he encontrado es establecer el ancho en 0 después del componente initialize (dado que el control está acoplado, en realidad no cambiará el tamaño del combobox, pero lo hará permite la TableLayoutPanel para que sea tan pequeño como el ancho establecido)

 InitializeComponent(); 
     comboField.Width = 0; 
+1

Esto funciona! ¡Gracias! https://github.com/IAmAI/TableLayoutSizingIssueTest/tree/fix-Me.Name –

9

he descargado el código y lo hice este cambio. funciona ahora -

Haz SizeType de la segunda columna de ciento y hacen que sea 100% Código

diseñador: -

this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); 

enter image description here

+1

Esto también funciona. Gracias, Andshuman. https://github.com/IAmAI/TableLayoutSizingIssueTest/tree/fix-Angshuman –

+1

Genial ... gracias !! Si el tamaño de la columna/fila se establece en Porcentaje, el tamaño de la columna/fila viene determinado por el tamaño del TableLayoutPanel. –

Cuestiones relacionadas