如何在c#中使用KeyDown事件使文本框只接收数字键值

本文关键字:键值 数字 文本 KeyDown 事件 | 更新日期: 2023-09-27 18:15:57

我表单中的这段代码更新了textBox1。每当按数字键时,输入两次

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

如果可以,解释为什么?修改代码或为我提供一个更好的解决方案。

输入(in textbox1):

54321
输出:

1234554321

如何在c#中使用KeyDown事件使文本框只接收数字键值

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

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

如果你想要隐藏非数字的键,你可以这样做:

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

从语法来看,我假设您使用的是WinForms。

按下的键事件没有被抑制,因此它仍然像普通按下的键事件一样工作,并将字符添加到框的文本中。此外,您可以再次将字符添加到文本中。

当键被按下时,尝试抑制键按事件,您不希望允许。

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

你可以这样尝试:

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

检查新的键盘api: KeyEventArgs。SuppressKeyPress

问题是"Handled"不关心挂起的WM_CHAR消息队列中已经建立的消息-因此设置Handled =true不能阻止KeyPress的发生。

为了不破坏任何目前得到e.d handled =true,我们需要添加一个名为SuppressKeyChar的新属性。如果我们反过来说,如果"处理"按键突然响起实际上工作,我们可能会打破那些不小心有这个设置的人真的。

试试这个代码只接受数字

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