键盘事件问题

时间:2010-06-10 06:56:36

标签: c# keyboard

我必须在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正在工作?

P.S。我写了 + UP ,因为用户想要使用小键盘箭头和SHIFT键导航,但他的NumLock也会打开。这就是我抓住 Keys.NumPad8

的原因

一切顺利, 斯托

1 个答案:

答案 0 :(得分:7)

它不起作用,因为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键比 转变 - 真的 代码

所以,如果你想赶上班次& numpad8你只需要检查UP键。