6

我想识别我的控件的击键。为此,我使用 KeyDown 事件。我想检测的击键类型是 CTRL + A 或 CTRL + C 等。(所以多个键的组合)

现在我已经修改了 KeyEventArgs 并找到了 Keys 枚举。(一切都很完美,只需使用 | 和 & 组合并找到正确的键)一个示例可能是 Shift + A 然后 KeyData 枚举的值是: ShiftKey | 班次 | 一个

当我按下 Control 键(所以 Control + A)尝试它时,我得到 131137 作为响应?而且我不知道为什么我没有得到类似 ControlKey | 控制 | A(或类似的东西)

我已经认识到,如果我尝试使用 A ist 131137 和 B ist 131138 和 C ist 131139 等等......所以我认为可以计算密钥,但我认为应该有一个更好的解决方案,然后就像这样?

131137 - 131072 = 65(对于 A)

我是对的,还是这是首选的解决方案,还是我误解了一些基本信息?

4

2 回答 2

8

您可以使用 KeyEventArgs 对象中的属性来获取 Ctrl、Shift 等...

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs_properties(v=vs.90).aspx

void Control_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.F4)
    {
        // Be happy
    }
}
于 2013-06-14T12:41:00.010 回答
3
131072 == (int) Keys.Control 

所以

131137 (100000000001000001 binary) == (int) (Keys.Control | Keys.A)

你可以放这样的东西

  private void myControl_KeyDown(object sender, KeyEventArgs e) {
    if (e.KeyData == (Keys.A | Keys.Control)) {
      ...
    }
于 2013-06-14T12:46:39.837 回答