Как определить, была ли нажата хеш-клавиша (#) в WPF?

wpf

398 просмотра

1 ответ

Я пытаюсь этот код в моем событии PreviewKeyDown, чтобы обнаружить, нажата ли клавиша хеширования (#) или нет, но он все еще показывает число (3) в моих TextBox и MessageBox: -

    private void text_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.D3 && Keyboard.Modifiers == ModifierKeys.Shift)
            MessageBox.Show(e.Key.ToString());
    }

Как я могу изменить или изменить этот код, чтобы сделать то, что мне нужно ?!
Благодарю.

Автор: Mohamed Источник Размещён: 08.11.2019 11:22

Ответы (1)


0 плюса

KeyDownзахватывает последнюю нажатую клавишу, которая была Key.D3, следовательно, почему вы видите 3в своем выводе. Это ожидаемое поведение. Почему вы хотите использовать e.Key.ToString()хотя? Это имело бы смысл, если вы хотите увидеть, какая клавиша нажимается, но вы заранее явно проверяете комбинацию SHIFT+ 3, поэтому вы уже знаете, что вам нужно.

// slightly modified your check
if (e.Key == Key.D3 && (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift)
{
    MessageBox.Show("SHIFT+3 combo pressed");
}

Кроме того, как отметил @keyboardP в комментариях, расположение #знака на клавиатуре зависит от расположения самой клавиатуры (США / Великобритания и т. Д.) Или от того, как она настроена в вашей операционной системе. Возможно, вы могли бы добавить проверку раскладки клавиатуры в миксе (возможно, стоит взглянуть на InputLanguageManagerкласс из System.Windows.Inputпространства имен).

РЕДАКТИРОВАТЬ : В качестве альтернативы, почему бы просто не отслеживать, был ли #символ введен в текстовое поле, а не проверять комбинации клавиш? Мне кажется, это гораздо проще, хотя это зависит от ваших требований.

Автор: trashr0x Размещён: 20.08.2016 01:52
Вопросы из категории :
32x32