为什么在KeyEvent中数字键盘上的数字和普通数字不一样?

本文关键字:数字 不一样 KeyEvent 键盘 为什么 | 更新日期: 2023-09-27 18:16:07

这段代码不允许我从数字键盘输入数值。

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

如何在一般情况下包含数值(包括常规键和数字键)?

为什么在KeyEvent中数字键盘上的数字和普通数字不一样?

因为它们毕竟是不同的键,尽管它们表示的字符是相同的

为了获得更好的结果,您可以使用Keys enum和KeyCode属性:

e.SuppressKeyPress = !((e.KeyCode >= Keys.D0 && e.KeyCode <= Keys.D9) || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9))

或者使用KeyPress事件,因为在那里你将在事件参数中有字符代码。

在KeyPress事件处理程序中,你可以这样做:

 e.Handled = !Char.IsDigit(e.KeyChar)

它们不一样,因为它们不是同一个键。键值是您在键盘上按下的特定键的抽象,而不是该键所代表的值。

也就是说,您可以简单地检查是否使用简单的or按下了numpad键或另一个键。

一种解决方案是使用KeyPress事件和TryParse方法,如下所示:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
     int n;
     e.Handled = !int.TryParse(e.KeyChar.ToString(), out n);
}

或者你可以像这样检查NumPads:

e.SuppressKeyPress = !((e.KeyValue >= 48 && e.KeyValue <= 57 || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)));