Проблема с клавиатурой - PullRequest
2 голосов
/ 10 июня 2010

Мне нужно захватить следующее событие клавиатуры в 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 не подходит?t срабатывает, но CTRL + 8 работает?

PS Я написал + UP , потому что пользователь хочет перемещаться с помощью стрелок на клавиатуре и клавиши SHIFT, но его NumLock также будет включен,Вот почему я ловлю Keys.NumPad8 .

Всего наилучшего, Петар

1 Ответ

7 голосов
/ 10 июня 2010

Это не сработает, потому что 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 - истинный код - вверх

Так что если вы хотите поймать shift & numpad8, вам нужно только проверить клавишу ВВЕРХ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...