Получите Char от ключа
Я кодирую пользовательский текстовый редактор, и я использую события KeyDown и KeyUp. Эти события получают KeyEventArgs из параметров, в которые включен экземпляр "Key".
Как я могу преобразовать этот "ключ" в реальный char?
Использование Key.ToString() с помощью "." Я получаю "OmePeriod" или с "," я получаю "OmeComma". Я могу напрямую преобразовать эти значения... но это тяжелая работа, и я уверен, что должен существовать любой класс, который преобразует эти ключи в реальный "char".
Спасибо!
С уважением.
Ответы
Ответ 1
Основная проблема здесь в том, что событие, которое вы ловите, является событием клавиатуры на клавиатуре и что ключ действительно является ключом и НЕ символом. Между ними есть карта! Например, при наборе shift-A вы получите два события вместо одного для нажатия.
это обсуждение может помочь: С# Как перевести виртуальный код ключа на char?
Ответ 2
Вместо использования события 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 для получения дополнительной информации.
Ответ 3
Это дает вам именно то, что вам нужно... это слишком специфичный для локали характер с клавиатуры Key code...
как захватить символ '#' на разных языковых клавиатурах в WPF/С#?
Ответ 4
Используйте свойство KeyEventArgs.Key и следующее: Как преобразовать символ в эквивалентное значение System.Windows.Input.Key Enum, но вместо этого используйте следующее: KeyInterop.VirtualKeyFromKey Method
Ответ 5
Переместите e.KeyValue на char. Пример:
например.
private void myTextBox_KeyDown(object sender, KeyEventArgs e)
{
char pressedCharacter = (char)e.KeyValue;
}