5

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

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

我应该使用哪一个?

4

4 回答 4

12

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

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

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

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

于 2009-02-19T08:00:04.887 回答
1

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

差异:

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

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

  • KeyValue- 的数值KeyCode

于 2009-02-19T08:06:59.300 回答
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");
        }
    }
于 2009-02-19T08:18:04.360 回答
0

请参阅对您其他问题的回答:

使用KeyPressed事件。

引用 MSDN:

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

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

于 2009-02-19T08:30:05.187 回答