Получить Char от ключа - PullRequest
       6

Получить Char от ключа

18 голосов
/ 06 сентября 2011

Я пишу собственный текстовый редактор и использую события KeyDown и KeyUp.Эти события получают KeyEventArgs из параметров, в которые включен экземпляр «Key».

Как я могу преобразовать этот «Key» в реальный символ?

Используя Key.ToString () с "«.Я получаю "OmePeriod" или с "," я получаю "OmeComma".Я могу преобразовать эти значения напрямую ... но это тяжелая работа, и я уверен, что должен существовать любой класс, который преобразует эти ключи в настоящий "char".

Спасибо!

С уважением.

Ответы [ 5 ]

5 голосов
/ 06 сентября 2011

Вместо использования события KeyDown попробуйте использовать событие TextInput.Присоедините обработчик событий, который выглядит следующим образом:

private void Grid_TextInput(object sender, TextCompositionEventArgs e)
{
    Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0];
    Debug.WriteLine(keyChar);
}

Обратите внимание, что он захватывает только первый байт, и это не будет работать для международного (Unicode) текста.Он также может не работать для более сложных событий ввода текста, поэтому имейте в виду!

См. эту статью MSDN для получения дополнительной информации.

5 голосов
/ 06 сентября 2011

Основная проблема здесь в том, что событие, которое вы ловите, является событием клавиатуры барабана, и что клавиша действительно является клавишей, а НЕ символом.В промежутке это карта ключей!Например, при вводе shift-A вы получите два события вместо одного для нажатия клавиши.

это обсуждение может помочь: C # Как преобразовать виртуальный код клавиши в символ?

3 голосов
/ 06 сентября 2011

Это дает вам именно то, что вам нужно ... это слишком специфичный для локали символ из кода клавиши клавиатуры ...

как записать символ '#' на разных клавиатурах локалей в WPF / C #?

0 голосов
/ 08 марта 2016

Приведите e.KeyValue к символу.как пример:

например.

private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
    char pressedCharacter = (char)e.KeyValue;
}
0 голосов
/ 06 сентября 2011

Используйте свойство KeyEventArgs.Key и следующее: Как преобразовать символ в эквивалентное значение перечисления System.Windows.Input.Key , но вместо этого используйте следующее: KeyInterop.VirtualKeyFromKey Method

...