C# - 禁用键盘输入到文本框中

时间:2011-07-18 23:25:27

标签: c# input textbox keyboard

我正在尝试禁用输入到文本框中的所有击键,但以下情况除外:

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);
        }
    }

如果有这样的话,按下时,键盘上的所有键(数字和句点按钮除外)都不会注册(或禁用)键的实际值而不输入任何内容?

9 个答案:

答案 0 :(得分:5)

使用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 :(得分:1)

有两种方法可以尝试解决这个问题:

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

  2. 使用TextBox的KeyPress事件在按下每个键时验证数据。

答案 2 :(得分:0)

看看这里:Simple Numeric TextBox

编辑:由于其他答案解释了如何处理OnKeyPress / OnKeyDown事件,本文将演示如何处理其他方案,如粘贴文本,因此我将保留此答案。

答案 3 :(得分:0)

您应该挂钩KeyDownKeyPress事件以防止输入不需要的字符。有一个sample on MSDN

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

但如果你坚持,一定要更换'。'使用系统的小数分隔符。如果您不假设所有值都是英语,则可以轻松进入无法输入小数值的问题。

例如,我在克罗地亚,在这里我们必须输入一个逗号(,)。在一些伊斯兰国家,我记不起小数点分隔符是一个哈希(#)。

请注意本地化问题。

答案 6 :(得分:0)

以下代码将禁止除数字,退格和小数之外的所有代码。它也只允许一个十进制数字输入。

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;
    }
}

答案 7 :(得分:0)

也可以使用

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

答案 8 :(得分:0)

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

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