¿Por qué mi valor TextBox.Width no acepta el valor que intento asignarle?

Estoy tratando de espaciar uniformemente los controles creados dinámicamente al darles un ancho y una altura que es una fracción del ancho y la altura del control del contenedor.

Sin embargo, aunque mis funciones que calculan las dimensiones son correctas, por alguna razón la asignación a la propiedad Ancho se rechaza obstinadamente. La función WidthToUse() devuelve 19, pero cuando se intenta asignar ese valor al cuadro de texto creado dinámicamente, permanece en... ¡630! ¿Por qué 630 para empezar, y por qué se niega a ser asignado?

Incluso la altura, aunque "trabajar" no funciona del todo bien: hay demasiados controles o no hay suficiente espacio en el panel para acomodar todos los controles usando esta matemática.

Aquí está mi código:

int WidthToUse = getTextBoxWidthToUse(tableLayoutPanelGreatGooglyMoogly.Width);
int HeightToUse = getControlHeightToUse(tableLayoutPanelGreatGooglyMoogly.Height);

TextBox txtbx = new TextBox();
txtbx.Parent = tableLayoutPanelGreatGooglyMoogly;
txtbx.Margin = new Padding();
txtbx.Dock = DockStyle.Fill;
txtbx.AutoSize = false;
txtbx.Width = WidthToUse;   // WidthToUse is 19, but txtbx.Width is 630 both before AND after this assignment!
txtbx.Height = HeightToUse; // HeightToUse is 27


private static int getControlHeightToUse(int theDynPanelHeight) {
    return (theDynPanelHeight / NUMBER_OF_ROWS);
}

private static int getTextBoxWidthToUse(int theDynPanelWidth) {
    return (theDynPanelWidth / 32);
}

private static int getLabelWidthToUse(int theDynPanelWidth) {
    return ((theDynPanelWidth / 64) * 3);
}

preguntado el 03 de mayo de 12 a las 20:05

¿Por qué está configurando tamaños explícitos si está usando DockStyle.Fill? -

2 Respuestas

DockStyle.Fill es una propiedad que describe el tamaño de un control en relación con el tamaño de su contenedor. Un control cambiará de tamaño para ajustarse a todo el espacio vacío en su contenedor principal con esta propiedad establecida.

contestado el 03 de mayo de 12 a las 20:05

Bien, eso era cierto; ahora el problema es: ¿cómo hago para que los cuadros de texto ocupen todo el espacio en la "celda"? Se adhieren a la parte superior. B. Clay Shannon-B. Cuervo Cuervo

Bien, lo tengo; Me siento como una marioneta, tirando de algunos hilos hacia arriba, otros hacia abajo, hasta que doy con la combinación exacta para hacer que las partes bailen juntas. Lo que es extraño/frustrante es que establecer la altura de los controles a la altura del contenedor dividido por el número de filas no funciona, ni establecer el ancho al ancho del contenedor dividido por el número de columnas. - B. Clay Shannon-B. Cuervo Cuervo

Tuve que establecer el divisor de altura en 14 cuando hay 12 filas. Supongo que el relleno o alguna otra "pelusa" está causando esta compensación desagradable. - B. Clay Shannon-B. Cuervo Cuervo

Porque tienes el Dock propiedad establecida en Fill sería mi conjetura.

contestado el 03 de mayo de 12 a las 20:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.