Textbox, NumericUpDown, etc. en Winform modifican la altura y prohíben la implementación de la entrada de números o contenido

¡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 Heightaltura 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 TextBoxla 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 TextBoxHeightproyecto

Por ejemplo, complete la información de nombre y edad a continuación, ajuste Labelel tamaño del texto del mensaje, es obvio que los tamaños no coinciden.

Si quieres modificar Textboxla 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 AutoSizeen falso y luego configure la altura. Las propiedades de Textbox AutoSizeestá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]

TextboxLa propiedad set MutliLinees verdadera, lo que permite Heightmodificar 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】

TextBoxKeyDown事件方法中,通过判断数字按键,设置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 TextChangedevento 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. errProviderComo campo de formulario, se utiliza para avisos de error; canNotInputtambié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();
复制代码

Supongo que te gusta

Origin juejin.im/post/7150315546171408398
Recomendado
Clasificación