Получить Чар из ключа

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

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

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

Спасибо!

С Уважением.


person Jesús Galindo    schedule 06.09.2011    source источник
comment
Уже обсуждалось stackoverflow.com/questions/7103360/   -  person Samich    schedule 06.09.2011
comment
Я думаю, что ответы на заголовок stackoverflow.com/questions/544141/ может помочь вопрос.   -  person Dmitriy    schedule 06.09.2011


Ответы (5)


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

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

person VdesmedT    schedule 06.09.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 для получения дополнительной информации.

person markmuetz    schedule 06.09.2011
comment
есть много вопросов по захвату ввода текста в wpf, некоторые ответы даже относятся к системным dll. Но ваш ответ, безусловно, лучший, что я видел до сих пор. - person jflepp; 07.09.2017

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

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

person WPF-it    schedule 06.09.2011
comment
Спасибо! Это то, что я искал! - person Jesús Galindo; 06.09.2011

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

person Paul    schedule 06.09.2011

Приведите e.KeyValue к char. как например:

eg.

private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
    char pressedCharacter = (char)e.KeyValue;
}
person Birke le Roux    schedule 08.03.2016
comment
Нет e.KeyValue - person MSL; 31.10.2016
comment
Это то, что я искал для своих целей. Спасибо за полезный ответ! - person Arvo Bowen; 25.01.2017
comment
Я только что понял, что это может привести к плохим результатам и, вероятно, вообще не должно использоваться. Когда я использовал это, я нажал клавишу NumberPad 8, и она отображается как KeyData и KeyCode со значением ключа 104. С другой стороны, при использовании (char)e.KeyValue значение 104 преобразуется в символ h, а НЕ 8! - person Arvo Bowen; 25.01.2017
comment
Лучший метод, который я нашел, был расположен по адресу stackoverflow.com/a/35377638/1039753. - person Arvo Bowen; 25.01.2017