¡Continúe creando, acelere el crecimiento! Este es el 4to día de mi participación en el "Nuggets Daily New Plan · October Update Challenge", haz clic para ver los detalles del evento
Los controles Textbox y NumericUpDown en Winform generalmente están en una sola línea, y la Height
altura no se puede modificar directamente a través de la propiedad, pero muchas veces necesitamos ajustar la altura para que se muestre de manera más razonable. Los tres métodos siguientes se presentan principalmente. El método recomendado es modificar la altura modificando el tamaño de fuente .
Y las siguientes dos implementaciones que prohíben la entrada del contenido especificado.
introducir
El cuadro de texto está predeterminado en el modo de una sola línea y la altura no se puede ajustar. Si encuentra que TextBox
la altura del cuadro de texto no es adecuada durante el uso, debe modificar la altura del cuadro de texto en el modo de una sola línea.
nuevo TextBoxHeight
proyecto
Por ejemplo, complete la información de nombre y edad a continuación, ajuste Label
el tamaño del texto del mensaje, es obvio que los tamaños no coinciden.
Si quieres modificar Textbox
la altura, puedes lograrlo a través de los siguientes trucos.
Establezca AutoSize en falso y luego establezca la altura [no recomendado]
Mantenga el modo de una sola línea, configúrelo AutoSize
en falso y luego configure la altura. Las propiedades de Textbox AutoSize
están ocultas y deben modificarse directamente en el código.
textBox1.AutoSize = false;
textBox1.Height = 28;
numericUpDown1.AutoSize = false;
numericUpDown1.Height = 28;
复制代码
Se puede ver que la altura sí está ajustada, pero hará que el texto mostrado sea inconsistente con la altura del control en sí, y habrá mucho espacio en blanco.
Cambie el cuadro de texto al modo de varias líneas, proteja la tecla Intro [no recomendado]
Textbox
La propiedad set MutliLine
es verdadera, lo que permite Height
modificar la altura y luego protege la tecla Intro en el evento de tecla KeyDown para evitar saltos de línea y formar un efecto de una sola línea.
textBox1.Multiline = true;
textBox1.Height = 28;
textBox1.KeyDown += TextBox1_KeyDown;
////
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter) // 或 e.KeyValue == 13 或 (int)e.KeyCode == 13
{
// 指示按键事件是否应传递到基础控件
// 如果为true,表示(Key)按键事件不应该发送到该控件
e.SuppressKeyPress = true;
}
}
复制代码
Se puede ver que este método también tiene el problema de la falta de coincidencia de texto y altura.
Al modificar el tamaño de fuente, cambia indirectamente la altura de Textbox y NumericUpDown [recomendado]
实际上,单行模式下可直接修改字体的大小,间接的实现高度的变化,NumericUpDown
控件也同样适用。
实际测试,可以看到,控件的高度、字体的大小显示等,有着很好的匹配。
NumericUpDown控件的一些常用属性
- Increment:指示每单击一下按钮时增加或减少的数量
- DecimalPlaces:指示要显示的小数位数
- Value:默认显示的数值
- Maximum:最大值(不能超过)
- Minimum:最小值(不能超过)
- RightToLeft:将上下箭头和数字左右调换
Hexadecimal
属性设置为true,用于在控件中显示十六进制值。
ThousandsSeparator
属性设置为true,可以在十进制数字中显示千位分隔符。
DecimalPlaces
属性设置要显示的小数的位数。
Textbox禁止输入数字的实现【利用e.SuppressKeyPress】
在 TextBox
的KeyDown
事件方法中,通过判断数字按键,设置e.SuppressKeyPress = true
取消数字key事件发送到该控件。
如下,禁止输入数字:
private void TextBox1_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9 && e.Modifiers != Keys.Shift) || (e.KeyCode>=Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))
{
e.SuppressKeyPress = true;
}
}
复制代码
Winform的键盘按键(key
)事件中,可以通过e.KeyCode
表示当前的按键。
Keys
静态类的Keys.D0 ~ Keys.D9
表示键盘顶部的数字键,通常结合Shift可以按下数字键上方的特殊符号。
Keys.NumPad0 ~ Keys.NumPad9
表示键盘右侧的小的数字键盘上的数字。
因此需用对此进行判断,并阻止其按键事件,实现禁止输入数字。
Textbox禁止输入数字或其他字符【使用TextChanged事件】
禁止输入 数字或者某指定的文字字符 的方法是 在TextChanged
事件方法中,通过判断最新的字符是否为数字,如果是则删除该字符,否则保持不变。同样也可以实现禁止输入数字的功能。
Cuando se usa el método de entrada, el evento del botón clave generalmente no se activa. En principio, el programa del método de entrada captura el evento del botón y lo convierte en el contenido de texto/carácter correspondiente. Por lo tanto, cuando se usa el método de entrada para ingresar chino y otros caracteres, básicamente sólo a través del
TextChanged
evento Implementar algunas funciones que prohíben la entrada.
La siguiente es una implementación simple del código para prohibir la entrada de caracteres de texto específicos. errProvider
Como campo de formulario, se utiliza para avisos de error; canNotInput
también se puede cambiar a otro texto de contenido que se debe prohibir ingresar.
errProvider = new ErrorProvider();
textBox1.TextChanged += TextBox1_TextChanged;
//// ...........
// 实现禁止输入特定文本字符
private void TextBox1_TextChanged(object sender, EventArgs e)
{
var txtBox= sender as TextBox;
// 取消错误提示
errProvider.SetError(txtBox, "");
// 不为空时
if (!string.IsNullOrWhiteSpace(txtBox.Text))
{
// "0123456789" 也可以改为其他需要禁止输入的内容文字
var canNotInput = "0123456789";
if (canNotInput.Contains(txtBox.Text[txtBox.Text.Length - 1]))
{
// 删除最后一个字符【两种方式】
// txtBox.Text = txtBox.Text.Remove(txtBox.Text.Length - 1);
txtBox.Text = txtBox.Text.Substring(0, txtBox.Text.Length - 1);
// 重新赋值后光标会出现在最前面
//txtBox.Focus(); // 通常需要设置文本框获取焦点再使用下面的Select到末尾,但是上面赋值已经有了光标,所以不需要
// 设置光标位置到文本末尾
txtBox.Select(txtBox.TextLength, 0);
// 滚动控件到光标处
txtBox.ScrollToCaret();
// 给定一个错误提示
//errProvider.BlinkStyle= ErrorBlinkStyle.AlwaysBlink;
errProvider.SetError(txtBox, $"不行允许输入此中的字符:{canNotInput}");
}
}
}
复制代码
El efecto de la operación es el siguiente:
Mueva (posicione) el cursor al final del cuadro de texto por código:
// 设置文本框获取焦点 txtBox.Focus(); // 设置光标位置到文本末尾 txtBox.Select(txtBox.TextLength, 0); // 滚动控件到光标处 txtBox.ScrollToCaret(); 复制代码