为什么 KeyEvent 中的数字小键盘数字和常规数字不一样?
Why are numeric keypad numbers and regular numbers not the same in KeyEvent?
此代码不允许我从数字键盘输入数值。
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) )
}
一般情况下如何包含数值(来自常规键和数字键)?
一种解决方案是使用 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)));
它们不一样,因为它们不是同一个密钥。键值是您在键盘上按下的特定键的抽象,而不是该键代表的值。
就是说,您可以使用简单的 OR 检查是否按下了小键盘键或其他键。
因为它们毕竟是不同的键,尽管它们代表的字符是相同的。
为了获得更好的结果,您可以使用 Keys
枚举和 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)
此代码不允许我从数字键盘输入数值。
private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) )
}
一般情况下如何包含数值(来自常规键和数字键)?
一种解决方案是使用 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)));
它们不一样,因为它们不是同一个密钥。键值是您在键盘上按下的特定键的抽象,而不是该键代表的值。
就是说,您可以使用简单的 OR 检查是否按下了小键盘键或其他键。
因为它们毕竟是不同的键,尽管它们代表的字符是相同的。
为了获得更好的结果,您可以使用 Keys
枚举和 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)