2013-04-04 2 views
4

Все, что я хочу сделать, это получить фактический символ, который нажимается всякий раз, когда вводится ключ для события.Как преобразовать e.KeyChar в фактическое значение символа при обработке событий клавиатуры?

Единственный вариант, который я вижу, это e.KeyChar, который даст мне позицию, а не сам символ.

Что я хочу сделать, это ограничить значения нажатия клавиши цифрами от 0 до 9. То, как я это делаю прямо сейчас, это просто if((e.KeyChar < 48 || (e.KeyChar > 57)))

Это кажется немного дешевым, чтобы просто ввести значения для 0 и 9, и мне бы хотелось узнать, как получить значение самого символа, а не его ключ ,

EDIT: Спасибо за ввод; так что вообще нет способа перейти от значения e.KeyChar к значению самого входа.

Я действительно хотел бы принять свое событие, и получить доступ к символу, нажатому напрямую, а не использовать e.KeyChar, чтобы получить числовое представление этого значения.

+0

или WinForms WPF? –

+0

winforms это приложение – user1993843

+0

Не игнорируйте ключ backspace! –

ответ

2

KeyChar является значением char - это является самого символа - 48 и 57 представляют собой значение для ASCII 0 и 9.

В C# вы можете ссылаться на символ через его числовой код ASCII или фактический символ в одинарных кавычках. Таким образом, ваш код может быть следующим:

if((e.KeyChar < '0' || (e.KeyChar > '9'))) 

который точно такой же.

5

Вот простой способ обнаружения, если нажата клавиша является цифрой или нет:

if (char.IsDigit(e.KeyChar)) { // doSomething(); } 
2

e.KeyChar является char, соответствующий нажатой клавише, а не позиции. Для представления символа Юникода .NET Framework использует char. Если под «фактическим значением символа», вы имеете в виду интегральное значение символов 0-9, а не их значения Unicode (48-57), вы можете сделать это:

var value = Char.GetNumericValue(e.KeyChar); 

Чтобы ограничить значения ключа прессы цифры 0-9:

if (!Char.IsDigit(e.KeyChar)) 
{ 
    e.Handled = true; 
    return; 
} 

Для более полного решения, что позволяет корректировки:

const char Backspace = '\u0008'; 
const char Delete = '\u007f'; 

if (!Char.IsDigit(e.KeyChar) // Allow 0-9 
    && e.KeyChar != Backspace // Allow backspace key 
    && e.KeyChar != Delete)  // Allow delete key 
{ 
    e.Handled = true; 
    return; 
} 
+0

Значения «Keys» являются клавиатурными кодами сканирования, вы не можете (значимо) отличить их от значений «char». – Blorgbeard

+0

@Blorgbeard благодарит за это. 'Keys.Back' работал, потому что' Keys.Back = 8' и Backspace unicode = 'U + 0008' (8). Однако 'Keys.Delete = 46' и Delete unicode =' U + 007F' (127), поэтому он был ошибочным. Я обновил свой ответ, чтобы исправить это. – 2Toad

Смежные вопросы