C#:在KeyDown事件中,我应该使用什么来检查哪个键被按下?
在KeyDown事件中,我需要处理KeyEventArgs。它(除其他外)具有以下三个特性:C#:在KeyDown事件中,我应该使用什么来检查哪个键被按下?,c#,keyboard,C#,Keyboard,在KeyDown事件中,我需要处理KeyEventArgs。它(除其他外)具有以下三个特性: e.KeyCode e.KeyData e.KeyValue 我应该用哪一个来做什么?编辑:不知何故,我误读了你的问题,包括检查有效字符。你修改了吗?我已经添加了每个的描述 KeyCode是向下键的枚举值 KeyData与KeyCode相同,但与任何SHIFT/CTRL/ALT键组合 KeyValue只是键码的整数表示形式 如果您只需要这个角色,我可能会建议使用KeyPress事件和。财产。然后
e.KeyCode
e.KeyData
e.KeyValue
我应该用哪一个来做什么?编辑:不知何故,我误读了你的问题,包括检查有效字符。你修改了吗?我已经添加了每个的描述
- KeyCode是向下键的枚举值
- KeyData与KeyCode相同,但与任何SHIFT/CTRL/ALT键组合
- KeyValue只是键码的整数表示形式
或者,您可以强制转换为char,然后在其上使用char.isleterOrdigit。我建议使用
KeyCode
属性检查大多数操作的Keys
枚举。然而,下面的一些基本差异可能会帮助您更好地决定您的情况需要哪一个
差异:
-表示当前处于关闭状态的键的KeyCode
枚举值Keys
-与KeyData
相同,只是它以修饰符的形式包含附加信息-Shift/Ctrl/Alt等KeyCode
-键码的数值KeyValue
private void tbSomeText_KeyDown (object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.B && e.Modifiers != Keys.Shift) {
MessageBox.Show("You Pressed b");
}
else if (e.KeyCode == Keys.A && e.Modifiers == Keys.Shift) {
MessageBox.Show("You Pressed Shift+A");
}
}
注意以下事项:
使用事件
引用MSDN:
KeyPressEventArgs指定用户按键时合成的字符。例如,当用户按下SHIFT+K时,KeyChar属性返回大写的K
这样,您就不必乱搞e.KeyCode
,
e.KeyData
和
e.KeyValue
但是KeyCode和KeyData具有相同的类型,即Keys枚举。我在那里找不到任何额外的东西?只有当键修改器(shift/alt/ctrl)关闭时才会有所不同。哦,因为这是一个标志的东西?是的,因为这是一个标志的“东西”!;-)我不同意。。。您假设用户不想捕获任何修饰符,并且他的输入仅限于键盘ASCII。IsleterOrdigit使用CharUnicodeInfo.getunicodegory(如果字符不是拉丁语)。是的,对不起,我决定将其拆分,因为我也想知道这一点,但更一般地说:)现在测试了IsleterOrdigit,它的工作原理与它应该的一样。使用常规ascii键、挪威字母æ、ø和å,以及将重音键与另一个重音键组合时。比如¨+o=ö。完美的我还对一些俄语和希腊语字符进行了验证,效果很好。是的,我接受了你在另一个问题上的回答。但在这里,我更想对它们的用途做一个一般性的解释。这就是我把它分开的原因。当我点击submit按钮时,我想到了juuust,所以,很抱歉出现了混乱=)