Различие событий по ключу с Return и Intro в WPF

Используя Sap Business One, я понял, что они различают клавишу ввода (цифровая клавиатура) и клавишу ввода/возврата. Вызванные события различаются в зависимости от того, какое из них я нажимаю. Это навело меня на мысль, что я могу контролировать оба события по отдельности.

В С# я могу установить событие нажатия клавиши, используя этот метод:

static void KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        // my code here
        e.Handled = true;
    }
}

Единственная проблема в том, что у меня один и тот же результат независимо от того, какую клавишу я нажимаю. Есть два значения, Enter и Return, для перечисления Key, оба с одинаковым значением: 6. Я пытался проверить каждое свойство для KeyEventArgs, но не нашел никакой разницы.

Можно ли узнать, какую клавишу нажал пользователь?


person Antonio Rodríguez    schedule 18.01.2021    source источник


Ответы (1)


Существует свойство IsExtendedKey, которому присваивается значение true для клавиши Numpad Enter.

Однако это internal, поэтому вам придется использовать отражение, чтобы получить его значение:

static void KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        PropertyInfo pi = typeof(KeyEventArgs)
            .GetProperty("IsExtendedKey", BindingFlags.NonPublic | BindingFlags.Instance);
        if (pi != null && (bool)pi.GetValue(e) == true)
        {
            MessageBox.Show("Into key was pressed!");
        }
        else
        {
            MessageBox.Show("Enter key was pressed!");
        }
    }
}
person mm8    schedule 18.01.2021
comment
Оно работает! Его также можно использовать для клавиш Home или End, но почему-то не для операторов или Decimal. Интересно, почему это свойство является внутренним, а не публичным. - person Antonio Rodríguez; 19.01.2021