如何使用C#中的KeyDown事件使TextBox只接收数字键值?

时间:2015-10-05 10:09:26

标签: c# textbox numbers key-events

只要按下数字键,我的表单中的代码就会两次更新 textBox1.Text

private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
     //MessageBox.Show();
     if( char.IsNumber((char)e.KeyCode) ) {
           textBox1.Text += (char)e.KeyCode;
     }
}

解释为什么你可以? 修改代码或为我提供更好的解决方案。

输入(在textbox1中):

54321

输出:

1234554321

4 个答案:

答案 0 :(得分:3)

当您按某个键时,一个字符已经附加到您的TextBox。然后运行以下代码,如果键代表一个数字,则再次追加它:

if (char.IsNumber((char)e.KeyCode)) {
    textBox1.Text += (char)e.KeyCode;
}

如果你想抑制任何不是数字的键,你可以改用它:

e.SuppressKeyPress = !char.IsNumber((char)e.KeyCode);

答案 1 :(得分:1)

您可以尝试这样:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
   e.SuppressKeyPress = !(e.KeyValue >= 48 && e.KeyValue <= 57);
}

检查New keyboard APIs: KeyEventArgs.SuppressKeyPress

  

问题是&#34; Handled&#34;没有处理挂起的WM_CHAR   消息已在消息队列中构建 - 因此设置Handled =   true不会阻止KeyPress发生。

     

为了不打破任何目前已经获得e.Handled =的人   是的,我们需要添加一个名为SuppressKeyChar的新属性。要是我们   另一方面,如果&#34;处理&#34;一个keydown突然开始了   实际上工作,我们可能会打破那些不小心把这个设置的人   真。

答案 2 :(得分:1)

从语法中我假设您使用WinForms进行以下回答。

按键事件未被禁止,因此它仍然像普通按键事件一样工作,并将字符添加到框的文本中。另外,您可以再次将该字符添加到文本中。

如果按下某个键,请尝试禁止按下按键事件,您不想允许。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (!char.IsNumber((char)e.KeyCode))
    {
        e.SuppressKeyPress = true;
    }
}

答案 3 :(得分:1)

尝试此代码仅接受数字

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
        e.Handled = true;
}