c# -在文本框中禁用键盘输入

本文关键字:键盘 输入 文本 | 更新日期: 2023-09-27 18:02:47

我试图禁用所有输入文本框的按键,除了以下内容:

0 1 2 3 4 5 6 7 8 9。(除了数字和'。

现在我有以下代码,但它只检查是否输入了一个字母作为第一个值(更不用说它真的很草率):

    private void yDisplacementTextBox_TextChanged(object sender, EventArgs e)
    {
         if (yDisplacementTextBox.Text.ToUpper() == "A" || yDisplacementTextBox.Text.ToUpper() == "B" || yDisplacementTextBox.Text.ToUpper() == "C" ||
             yDisplacementTextBox.Text.ToUpper() == "D" || yDisplacementTextBox.Text.ToUpper() == "E" || yDisplacementTextBox.Text.ToUpper() == "F" || 
             yDisplacementTextBox.Text.ToUpper() == "G" || yDisplacementTextBox.Text.ToUpper() == "H" || yDisplacementTextBox.Text.ToUpper() == "I" ||
             yDisplacementTextBox.Text.ToUpper() == "J" || yDisplacementTextBox.Text.ToUpper() == "K" || yDisplacementTextBox.Text.ToUpper() == "L" ||
             yDisplacementTextBox.Text.ToUpper() == "M" || yDisplacementTextBox.Text.ToUpper() == "N" || yDisplacementTextBox.Text.ToUpper() == "O" ||
             yDisplacementTextBox.Text.ToUpper() == "P" || yDisplacementTextBox.Text.ToUpper() == "Q" || yDisplacementTextBox.Text.ToUpper() == "R" ||
             yDisplacementTextBox.Text.ToUpper() == "S" || yDisplacementTextBox.Text.ToUpper() == "T" || yDisplacementTextBox.Text.ToUpper() == "U" ||
             yDisplacementTextBox.Text.ToUpper() == "V" || yDisplacementTextBox.Text.ToUpper() == "W" || yDisplacementTextBox.Text.ToUpper() == "X" ||
             yDisplacementTextBox.Text.ToUpper() == "Y" || yDisplacementTextBox.Text.ToUpper() == "Z")
        {
            MessageBox.Show("Please enter a numeric value for the Y Displacement.", "Y Displacement: Numbers Only Error",
                       MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
    }

无论如何有它,所以当按下时,键盘上的所有键(除了数字和句号按钮)不注册(或禁用)键的实际值和输入什么?

c# -在文本框中禁用键盘输入

使用textBox1.KeyPress += textBox1_KeyPress

这个代码只允许数字和.和退格。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
    { 
        e.Handled = true; 
    }
    //Edit: Alternative
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
    {
        e.Handled = true;
    }
}

有两种方法:

  1. 等待用户输入完数据,然后使用double.TryParse()确保它是一个有效的数字

  2. 使用文本框的KeyPress事件在每个键被按下时验证数据

看看这里:简单数字文本框

编辑:由于其他答案解释了如何处理OnKeyPress/OnKeyDown事件,本文演示了如何处理其他场景,如粘贴文本,所以我将保留这个答案。

您应该连接到KeyDownKeyPress事件,以防止输入不需要的字符。MSDN上有一个示例

许多第三方控件库也内置了这种功能,如果您发现自己使用其中一个的话

更好的做法是允许输入任何内容,但通过错误提供程序提供关于失败验证的通知(valididating事件和double.TryParse())。

但如果你坚持,一定要替换'。',加上系统的小数分隔符。如果你不假设所有的值都是英文的,你很容易陷入不能输入小数的问题。

例如,我在克罗地亚,这里我们必须键入逗号(,)。在一些伊斯兰国家,我不记得小数分隔符是散列(#)。

所以要注意本地化问题

下面的代码将抑制除数字、退格和小数点以外的所有字符。它也只允许一个小数作为数字项。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((e.KeyChar > (char)Keys.D9 || e.KeyChar < (char)Keys.D0) && e.KeyChar != (char)Keys.Back && e.KeyChar != '.')
    { 
        e.Handled = true;
        return; 
    }
    if(e.KeyChar == '.' && textBox1.Text.Contains('.'))
    {
        e.Handled = true;
    }
}

也可以使用

if (!Char.IsDigit(e.KeyChar) && e.KeyChar != ''b' && e.KeyChar != '.'){
            e.Handled = true;}

使text/cmb框只读的最短修复,将以下内容附加到相应的按键事件:

private void cmbDisable_KeyPress(object sender, KeyPressEventArgs e) { e.KeyChar = (char)(0); }