键枚举,不返回所有标点符号的ASCII等效项

时间:2011-09-26 17:22:58

标签: c# .net winforms c++-cli keycode

我有以下密钥处理程序:

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工作更容易,只需要处理箭头键和页面向上/向下,也许我需要两个......

2 个答案:

答案 0 :(得分:1)

如果我没记错的话,KeyDown事件主要用于处理“特殊”键,即功能键,Home / End等。KeyCode是实际的键盘(硬件)“扫描码“,不保证与Unicode字符值相同。

如果您想要字符值,则可能需要KeyPress事件而不是KeyDown。但是,如果您还想处理“特殊”键,那么您将需要两个键。

答案 1 :(得分:1)

密钥代码不是ASCII。

您可能希望使用KeyPress事件而不是KeyDownKeyPress的事件参数包括KeyChar字段,该字段具有ASCII码(或Unicode,但对于ASCII字符,Unicode值相同)。