c# - ruta - Cambiar la altura del cuadro de texto?
diseños de textos en word (18)
la manera más simple de hacer eso
1 .. haga clic derecho en el cuadro de texto
2 .. ir a la propiedad
establecer Multiline = True
ahora hecho cambiará automáticamente el tamaño de TextBox
y también puedes personalizar eso
¿Cómo cambio la altura de un cuadro de texto?
Ninguno de los siguientes trabajos:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
o
this.TextBox1.Size.Height = 100;
Quería poder cambiar la altura del cuadro de texto de una sola línea para que se ajuste a un tamaño de letra sin usar líneas múltiples si es posible.
Acabo de encontrar un gran truco para establecer una altura personalizada en un cuadro de texto.
En la vista de diseñador, establezca minimumSize
en lo que desee y luego elimine completamente la configuración de size
. ¡Esto hará que el diseñador se actualice con la nueva configuración mínima!
Algunos de ustedes estuvieron cerca, pero cambiar el código de diseñador de esa manera es molesto porque siempre hay que retroceder y cambiarlo nuevamente.
El OP original probablemente usaba una versión anterior de .net porque la versión 4 autosizesiza la altura del cuadro de texto para que se ajuste a la fuente, pero no ajusta el tamaño de los cuadros combinados y los cuadros de texto, lo cual es un problema completamente diferente, pero me atrajo aquí.
Este es el problema al que me enfrenté cuando colocaba cuadros de texto al lado de cuadros combinados en un formulario. Esto es un poco irritante porque ¿quién quiere dos controles uno al lado del otro con diferentes alturas? O diferentes fuentes para forzar alturas? ¡Intensifica Microsoft, esto debería ser simple!
Estoy usando .NET Framework 4 en VS2012 y la siguiente fue la solución más simple para mí.
En el evento de carga de formulario (o en cualquier lugar siempre que se textbox.AutoSize = false
después de InitializeComponent
): textbox.AutoSize = false
Luego, configure la altura a lo que desee. Para mí, quería que mis cuadros de texto y mis cuadros combinados textbox.height = combobox.height
la misma altura, así que textbox.height = combobox.height
hizo el truco para mí.
Notas:
1) El diseñador no se verá afectado, por lo que será necesario que inicie su proyecto para ver el resultado final, por lo que puede haber algo de prueba y error.
2) Alinee las partes superiores de sus cuadros combinados y cuadros de texto si desea alinearlos correctamente después de cambiar el tamaño, ya que los cuadros de texto se reducirán.
AutoSize, Minimum, Maximum no da flexibilidad. Utilice multilínea y maneje el evento de la tecla Intro y suprima la pulsación de tecla. Funciona genial.
textBox1.Multiline = true;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
}
}
Creo que esto debería funcionar.
TextBox1.Height = 100;
El siguiente código agregado en su constructor después de llamar a InitializeComponent () hará posible establecer programáticamente su cuadro de texto a la altura correcta sin a) cambiar la propiedad de Multiline, b) tener que codificar una altura, oc) mucking con el Designer- código generado Todavía no es necesariamente tan limpio o agradable como hacerlo en un control personalizado, pero es bastante simple y robusto:
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
Decidí hacerlo más limpio y fácil de usar al ponerlo en una clase estática y convertirlo en un método de extensión en TextBox:
public static class TextBoxExtensions
{
public static void CorrectHeight(this TextBox txtbox)
{
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
}
}
Esto es lo que funcionó bien para mí, ya que todo lo que quería hacer era establecer el alto del cuadro de texto. La propiedad es de solo lectura y la propiedad está en la clase Unit, por lo que no puede simplemente configurarla. Así que acabo de crear una nueva Unidad y el constructor me permite establecer la altura, luego establecer el cuadro de texto a esa unidad en su lugar.
Unit height = txtTextBox.Height;
double oldHeight = height.Value;
double newHeight = height.Value + 20; //Added 20 pixels
Unit newHeightUnit = new Unit(newHeight);
txtTextBox.Height = newHeightUnit;
Hay dos maneras de hacer esto :
- Establezca la propiedad "multilínea" del cuadro de texto en verdadero; en este caso, no desea hacerlo así;
- Establecer un tamaño de fuente más grande para el cuadro de texto
Creo que es la única forma de hacerlo; el tamaño de fuente más grande debería caber automáticamente con el cuadro de texto
Pasos:
- Establecer los cuadros de texto en multilínea
- Cambiar la altura
- Cambiar el tamaño de la fuente (por lo que cabe en los cuadros de texto grandes)
- Establecer los cuadros de texto a no multilínea
Prueba lo siguiente :)
textBox1.Multiline = true;
textBox1.Height = 100;
textBox1.Width = 173;
Puede colocarlo dentro de un panel que tenga el mismo color de fondo con la altura deseada. De esta manera, tiene la ventaja de que el cuadro de texto se puede centrar horizontalmente, lo que no es proporcionado por otras soluciones.
Puedes hacerlo aún más natural usando los siguientes métodos
private void textBox1_Enter(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.FixedSingle;
}
private void textBox1_Leave(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.None;
}
Puede establecer las MinimumSize
y / o MaximumSize
del cuadro de texto. Esto no afecta el tamaño de inmediato, pero cuando cambia el tamaño del cuadro de texto en el diseñador de formularios, el tamaño se ajustará automáticamente para satisfacer las restricciones de tamaño mínimo / máximo. Esto funciona incluso cuando Multiline
se establece en false
y no depende del tamaño de la fuente.
Puede ser que sea un poco tarde. Pero puedes hacer esto.
txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);
Lo solucioné de esa manera.
Sé que esta es una especie de publicación anterior, pero me encontré en este mismo tema, y al investigar un poco descubrí que el tamaño de un cuadro de texto de WinForms se calcula realmente según el tamaño de la fuente que contiene, simplemente no es bastante igual a eso.
Este chico explica cómo se hace el cálculo y cómo puede configurarlo en su TextBox para obtener la Altura deseada.
¡Aclamaciones!
Vaya a yourForm.Designer.cs Desplácese hasta su cuadro de texto. El siguiente ejemplo es para el objeto textBox2. Agrega esto
this.textBox2.AutoSize = false;
y establece su tamaño a lo que quieras
this.textBox2.Size = new System.Drawing.Size(142, 27);
Funcionará como un amuleto, sin establecer multilínea en verdadero, pero solo hasta que cambie cualquier opción en el diseñador (tendrá que volver a establecer estas 2 líneas). Creo que este método es aún mejor que multilining. Tenía un cuadro de texto para mi apodo en mi aplicación y con multilínea, las personas a veces escribían sus nombres dos veces, como Thomas / nThomas (solo veías uno en la línea del cuadro de texto). Con esta solución, el texto simplemente se esconde a la izquierda después de cada char demasiado tiempo para el ancho, por lo que es mucho más seguro para los usuarios, para poner las entradas.
establecer la propiedad de tamaño mínimo
tb_01.MinimumSize = new Size(500, 300);
Esto es trabajo para mí.
para mí, el mejor enfoque es eliminar el borde del cuadro de texto, y colocarlo dentro de un Panel, que se puede personalizar como lo desee.
public partial class MyTextBox : TextBox
{
[DefaultValue(false)]
[Browsable(true)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
public MyTextBox()
{
InitializeComponent();
this.AutoSize = false;
}