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.
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
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
Supongo que la respuesta más fácil es: cambiar a WPF. Todo tiene una propiedad VerticalContentAlignment y una propiedad HorizontalContentAlignment. – MusiGenesis