C#:在KeyDown事件中,我应该使用什么来检查哪个键被按下?

C#:在KeyDown事件中,我应该使用什么来检查哪个键被按下?,c#,keyboard,C#,Keyboard,在KeyDown事件中,我需要处理KeyEventArgs。它(除其他外)具有以下三个特性: e.KeyCode e.KeyData e.KeyValue 我应该用哪一个来做什么?编辑:不知何故,我误读了你的问题,包括检查有效字符。你修改了吗?我已经添加了每个的描述 KeyCode是向下键的枚举值 KeyData与KeyCode相同,但与任何SHIFT/CTRL/ALT键组合 KeyValue只是键码的整数表示形式 如果您只需要这个角色,我可能会建议使用KeyPress事件和。财产。然后

在KeyDown事件中,我需要处理KeyEventArgs。它(除其他外)具有以下三个特性:

  • e.KeyCode
  • e.KeyData
  • e.KeyValue

我应该用哪一个来做什么?

编辑:不知何故,我误读了你的问题,包括检查有效字符。你修改了吗?我已经添加了每个的描述

  • KeyCode是向下键的枚举值
  • KeyData与KeyCode相同,但与任何SHIFT/CTRL/ALT键组合
  • KeyValue只是键码的整数表示形式
如果您只需要这个角色,我可能会建议使用KeyPress事件和。财产。然后可以使用来确定它是否是有效字符


或者,您可以强制转换为char,然后在其上使用char.isleterOrdigit。

我建议使用
KeyCode
属性检查大多数操作的
Keys
枚举。然而,下面的一些基本差异可能会帮助您更好地决定您的情况需要哪一个

差异:

  • KeyCode
    -表示当前处于关闭状态的键的
    Keys
    枚举值

  • KeyData
    -与
    KeyCode
    相同,只是它以修饰符的形式包含附加信息-Shift/Ctrl/Alt等

  • 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,所以,很抱歉出现了混乱=)