我有以下密钥处理程序:
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
}
这适当地处理数字和字母,但是当我按下任何标点时,KeyCodes完全是精神上的。使用签名char
我得到-66代表'。'和190 unsigned char
。
我认为这必定是由于我与Windows搞砸了,请有人提供更好的方法来处理Forms标准文档容器之外的文本键盘吗?
Keypress声音很好,虽然可以抑制输出吗?也许甚至'Alt'检测(只是为了真正路由方便的alt-F4组合)?请参阅我在方法入口点添加的两行。 KeyPress比让我的dllimport工作更容易,只需要处理箭头键和页面向上/向下,也许我需要两个......
答案 0 :(得分:1)
如果我没记错的话,KeyDown
事件主要用于处理“特殊”键,即功能键,Home / End等。KeyCode
是实际的键盘(硬件)“扫描码“,不保证与Unicode字符值相同。
如果您想要字符值,则可能需要KeyPress
事件而不是KeyDown
。但是,如果您还想处理“特殊”键,那么您将需要两个键。
答案 1 :(得分:1)
密钥代码不是ASCII。
您可能希望使用KeyPress
事件而不是KeyDown
。 KeyPress
的事件参数包括KeyChar
字段,该字段具有ASCII码(或Unicode,但对于ASCII字符,Unicode值相同)。