2010-04-16 41 views
6

Estoy trabajando en un proyecto actualizando su interfaz de usuario de la aplicación WinForms para que sea más consistente con los tamaños. Los controles TextBox y ComboBox tienen diferentes alturas por defecto, incluso con la misma fuente. He podido cambiar el tamaño de los cuadros de texto desactivando AutoSize, pero el texto aún se encuentra en la parte superior del control, dejando un espacio debajo.C# WinForms Alineación vertical para TextBox, etc.

¿Hay alguna forma de centrar el texto verticalmente en el control?

Respuesta

7

Si quieres desactivar AutoSize en un control, que debe ser un Label, ya TextBox no tiene una propiedad AutoSize. La propiedad TextAlign de Label es del tipo ContentAligment, por lo que puede establecer la alineación horizontal y vertical.

Por diversas razones aburridas, cuadros de texto en las ventanas están destinados a ajustar automáticamente sus alturas a la fuente utilizada. Para controlar las alturas y centrar verticalmente el texto, puede crear rápidamente un UserControl personalizado con el que puede reemplazar todos sus cuadros de texto.

En el control de usuario, establecer el BorderStyle en Fixed3D y el BackColor en System.Window. Agregue un TextBox y configure su BorderStyle en Ninguno. En el evento Resize para el control, agregue código que haga que TextBox tenga el mismo ancho que el área de cliente del control de usuario (contabilizando los píxeles del borde) y lo alinee a la izquierda (es decir, textBox1.Left = 0;) y lo centre verticalmente (por ejemplo, textBox1.Top = (this.Height - textBox1.Height)/2;).

Finalmente, agregue al usuario el control de las propiedades y eventos de tipo TextBox que necesite (probablemente solo Text y TextChanged, supongo) y conéctelos para que pasen al TextBox dentro de su control, como este :

public string Text 
{ 
    get 
    { 
     return textBox1.Text; 
    } 
    set 
    { 
     textBox1.Text = value; 
    } 
} 

Si desea obtener super-lujo con esto, incluso se podría reemplazar propiedad TextAlign de su control de usuario con uno que es en realidad de tipo ContentAlignment (como la etiqueta) y luego alinear el cuadro de texto interior para que coincida.

Este mismo enfoque funcionará para un ComboBox, aunque se verá un poco extraño. Con ComboBox, estableces su propiedad FlatStyle en Flat, de lo contrario lidias con ella igual que TextBox. Parecerá extraño porque el cuadro de la flecha desplegable no estará exactamente en la parte superior e inferior del panel.

+5

Al igual que un FYI, de hecho hay una propiedad AutoSize en TextBoxes. Simplemente no aparecerá en la hoja de propiedades ni se completará automáticamente debido a algunas decoraciones de atributos. Pero myTextBox.AutoSize = falso; compilará, y poner eso en el constructor de un control heredado dará como resultado un cuadro de texto de tamaño variable. – Clyde

+1

tomado en cuenta.Han pasado años desde que dejé de intentar hacer que los controles de Windows se vean diferentes al estándar, por lo que estoy un poco oxidado. Es interesante que el Intellisense diga "Esta propiedad no es relevante para esta clase", aunque obviamente * es * (establecerlo en falso hace que la altura sea ajustable). – MusiGenesis

+0

Supongo que la respuesta más fácil es: cambiar a WPF. Todo tiene una propiedad VerticalContentAlignment y una propiedad HorizontalContentAlignment. – MusiGenesis

1

un poco tarde, pero aquí la respuesta fácil ..

crear un vacío de control e incluir su cuadro de texto como un niño, a continuación, cuando el control de los padres o cambiar el tamaño de la caja de texto realinear el control de cuadro de texto en la mitad verticalmente

eliminar los bordes, hacer que el bk sea del mismo color que el principal (predeterminado)

oh, anule la fuente para establecer la fuente del cuadro de texto y creo que tiene el cuadro de texto valign.

0

Una solución muy simple es utilizar un Datagridview con encabezados de 1 columna, 1 fila, columna y fila no visibles y establecer DefaultCellStyle.Alignment = MiddleLeft.

y desactivar añadir/borrar de filas y usted tiene un cuadro de texto que se alinea perfectamente con el texto.

Cuestiones relacionadas