C#:在KeyDown事件中,我应该使用什么来检查键是什么?

时间:2009-02-19 07:54:25

标签: c# keyboard

在KeyDown事件中,我有KeyEventArgs可以使用。它具有(除其他外)这三个属性:

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

我应该使用哪一个?

4 个答案:

答案 0 :(得分:12)

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

  • KeyCode 是关键字的Keys枚举值
  • KeyData 与KeyCode相同,但与任何SHIFT / CTRL / ALT键组合
  • KeyValue 只是KeyCode的整数表示

如果需要该角色,我可能会建议您使用KeyPress事件并使用KeyPressEventArgsKeyChar属性。然后,您可以使用Char.IsLetterOrDigit()来确定它是否是有效字符。

或者,您可以将KeyEventArgs.KeyCode转换为char,然后对其使用Char.IsLetterOrDigit。

答案 1 :(得分:1)

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

的差异:

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

  • KeyData - 与KeyCode相同,但它具有修饰符形式的附加信息 - Shift / Ctrl / Alt等。

  • KeyValue - KeyCode的数值。

答案 2 :(得分:0)

非常基本的使用KeyDown

   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");
        }
    }

答案 3 :(得分:0)

查看my answerother question

使用KeyPressed事件。

引用MSDN:

  

KeyPressEventArgs指定用户按下键时组成的字符。例如,当用户按下SHIFT + K时,KeyChar属性返回一个大写的K。

这样你就不需要弄乱e.KeyCodee.KeyDatae.KeyValue