为什么在KeyEvent中数字键盘上的数字和普通数字不一样?
本文关键字:数字 不一样 KeyEvent 键盘 为什么 | 更新日期: 2023-09-27 18:16:07
这段代码不允许我从数字键盘输入数值。
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) )
}
如何在一般情况下包含数值(包括常规键和数字键)?
因为它们毕竟是不同的键,尽管它们表示的字符是相同的
为了获得更好的结果,您可以使用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)));