Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么数字键盘数字和常规数字在KeyEvent中不相同?_C#_Textbox_Key Events_Numpad - Fatal编程技术网

C# 为什么数字键盘数字和常规数字在KeyEvent中不相同?

C# 为什么数字键盘数字和常规数字在KeyEvent中不相同?,c#,textbox,key-events,numpad,C#,Textbox,Key Events,Numpad,此代码不允许我从数字键盘输入数值 private void textBox1_KeyDown( object sender, KeyEventArgs e ) { e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) ) } private void textBox1\u KeyDown(对象发送方,KeyEventArgs e){ e、 SuppressKeyPress=!((e.Ke

此代码不允许我从数字键盘输入数值

private void textBox1_KeyDown( object sender, KeyEventArgs e ) {
    e.SuppressKeyPress = !( (e.KeyValue >= 48 && e.KeyValue <= 57) )
}
private void textBox1\u KeyDown(对象发送方,KeyEventArgs e){

e、 SuppressKeyPress=!((e.KeyValue>=48&&e.KeyValue一种解决方案是使用
KeyPress
事件和
TryParse
方法,如下所示:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
     int n;
     e.Handled = !int.TryParse(e.KeyChar.ToString(), out n);
}
e.SuppressKeyPress = !((e.KeyValue >= 48 && e.KeyValue <= 57 || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)));
或者您可以像这样检查
numpad

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
     int n;
     e.Handled = !int.TryParse(e.KeyChar.ToString(), out n);
}
e.SuppressKeyPress = !((e.KeyValue >= 48 && e.KeyValue <= 57 || (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9)));

e.SuppressKeyPress=!((e.KeyValue>=48&&e.KeyValue=Keys.NumPad0&&e.KeyCode它们不同,因为它们不是同一个键。KeyValue是您在键盘上按下的特定键的抽象,而不是该键所代表的值的抽象


这就是说,您可以简单地检查是否用简单或。

键按下了numpad键或另一个键,因为它们毕竟是不同的键,即使它们所代表的字符是相同的

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

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

如果(Key.NumPad9.Equals(e.Key)| | Key.D9.Equals(e.Key))你可以用likethis@madan对于我应该提到的每一个键值?使用带中断的开关盒有没有其他方法可以简化它。我只需要允许文本框中的数字和“+”、“-”、“/”和“*”?@madan,这真是一个糟糕的建议。你已经解决了一个简单的问题,并建议写一个可怕的乱七八糟的东西来解决它。请不要重新编译停止使用
开关
解决任何问题。