Перечисление ключей, не возвращающее ASCII-эквивалент для всех знаков препинания - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть следующий обработчик ключа:

void Form1::texBox_KeyDown(System::Object^  sender,
             System::Windows::Forms::KeyEventArgs^  e) {
    //New lines in response to suggestion of using keypress
    if (Control::ModifierKeys == Keys::Alt) return;
    e->SuppressKeyPress=true;
    unsigned char chr = (unsigned char)e->KeyCode;
    //char chr = (char)e->KeyCode; //Gives negative 'values'
    if (chr < ' ') return;
    //else do stuff
}

Это обрабатывает цифры и буквы соответствующим образом, но когда я нажимаю на любую пунктуацию, коды клавиш становятся полностью умственными. Используя подписанный char, я получил -66 за '.' и 190 с unsigned char.

Полагаю, это связано с чем-то, с чем я связывался с Windows. Может, кто-нибудь предложит лучший способ обработки текстовой клавиатуры вне стандартных контейнеров документов Forms?

Нажатие клавиш звучит хорошо, будет ли работать подавление вывода? Может быть, даже обнаружение «Alt» (просто для маршрутизации удобной комбинации alt-F4)? Пожалуйста, смотрите две строки, которые я добавил в точке входа метода. KeyPress проще, чем заставить мой dllimport работать, просто нужно обрабатывать клавиши со стрелками и перелистывать страницы вверх / вниз, возможно, мне нужны оба ...

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Коды клавиш не являются ASCII.

Возможно, вы хотите использовать событие KeyPress вместо KeyDown. Аргументы события для KeyPress включают поле KeyChar, которое имеет код ASCII (или Unicode, но для символов ASCII значение Unicode одинаково).

1 голос
/ 26 сентября 2011

Если я правильно помню, событие KeyDown используется в основном для обработки «специальных» клавиш, т. Е. Функциональных клавиш, Home / End и т. Д. KeyCode - это фактический клавиатурный (аппаратный) «код сканирования», которыйне гарантируется совпадение со значением символа Unicode.

Если вам нужны значения символов, вам, вероятно, нужно событие KeyPress вместо KeyDown.Однако, если вы также хотите обрабатывать «специальные» клавиши, вам понадобятся оба.

...