【问题标题】:Keyboard event issue键盘事件问题
【发布时间】:2010-06-10 06:56:36
【问题描述】:

我必须在 TextBox 中捕获以下键盘事件 - SHIFT + 8(在 numpad 上)。这也意味着 NumLock 将打开。当我尝试以下 SHIFT + UP 时未打印:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Shift && e.KeyCode == Keys.NumPad8)
        Console.WriteLine("SHIFT + UP");

    Console.WriteLine(e.KeyCode);
    Console.WriteLine(e.KeyData);
    Console.WriteLine();
}

但是 CTRL + 8(在 numpad 上)正在工作。

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.NumPad8)
        Console.WriteLine("CTRL + UP");
}

更新:按一次 SHIFT + 8 即可打印以下内容:

ShiftKey
ShiftKey, Shift

Up
Up

ShiftKey
ShiftKey, Shift

谁能解释一下,为什么 SHIFT + 8 没有被触发,但 CTRL + 8 有效?

附:我写了 + UP,因为用户想用数字键盘箭头和 SHIFT 键导航,但他的 NumLock 也会打开。这就是我捕获 Keys.NumPad8 的原因。

一切顺利, 佩塔尔

【问题讨论】:

  • 您是否尝试在该方法上设置断点并查看 a) 它被调用和 b) 当您按下该组合键时实际传递了什么?
  • 打开记事本,写一些字符串,转到最后一个字符串,然后按 Shift+NumPad8。这种组合是向上箭头。
  • @Paolo,是的,我已经尝试过了,我已经更新了我的问题。

标签: c# keyboard


【解决方案1】:

它不起作用,因为 shift+numpad8 = UP 并且当您同时按下这些键时:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    string shift = e.Shift.ToString();    //false
    string code = e.KeyCode.ToString();   //up
}

如果你同时按下 shift 和 up 键 班次 - 真 代码 - 向上

所以如果你想抓住 shift & numpad8 你只需要检查 UP 键。

【讨论】:

  • OK,但是如果用户只按下了向上箭头(不是在数字键盘上),该事件将被触发。如何预防?
  • 如果用户只按向上箭头,则 e.Shift 将为假(在我的配置中)。
  • OK,用户按下 SHIFT + 8。那么 e.Shift 为假,e.Keys == Keys.Up 为真。这与按不在键盘上的箭头相同。但是在文本框中按右箭头是用于导航文本:(我需要使用 SHIFT + 4、SHIFT + 6、SHIFT + 8 和 SHIFT + 2 左右导航。
  • 有什么我不明白的地方吗?看看我更新的问题。按一次 SHIFT + 8 键,打印三样东西。首先仅 Shift,然后仅向上,最后再次仅 Shift。
  • e 对象没有可以直接获取的变量,如果它的 shift+numpad8 或只是 UP 键。如果你想捕捉到这一点,你可以实现 key down 和 key up 事件。如果您在按下任何键之前抓住 shift 然后向上键,那就是 shift+numpad8。
猜你喜欢
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多