Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 键枚举,不返回所有标点符号的ASCII等效值_C#_.net_Winforms_C++ Cli_Keycode - Fatal编程技术网

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

C# 键枚举,不返回所有标点符号的ASCII等效值,c#,.net,winforms,c++-cli,keycode,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->Suppres

我有以下密钥处理程序:

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
}
void Form1::texBox\u KeyDown(系统::对象^sender,
系统::Windows::窗体::KeyEventArgs ^e){
//关于使用按键的建议的新线路
if(Control::ModifierKeys==Keys::Alt)返回;
e->SuppressKeyPress=true;
无符号字符chr=(无符号字符)e->KeyCode;
//char chr=(char)e->KeyCode;//给出负“值”
如果(chr<'')返回;
//其他人做的事情
}
这可以适当地处理数字和字母,但当我按下任何标点符号时,键码就会完全进入精神状态。使用有符号的
char
我得到了“.”的-66和
无符号的char
的190

我想这一定是因为我在Windows上弄乱了什么,请问有人能提供一种更好的方法来处理表单标准文档容器之外的文本键盘吗


按键听起来不错,但它能抑制输出吗?甚至可能是“Alt”检测(只是为了传递方便的Alt-F4组合)?请参阅我在方法入口点添加的两行。按键比让我的dllimport工作更容易,只需要处理箭头键和上下翻页,也许我两者都需要…

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

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

键码不是ASCII码


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

我想您需要
Char.IsControl()
来代替与硬编码值的比较。我需要ASCII键码,A=65(或其他)。基本上,0..127是ASCII标准。哦,等等,我明白了,UNICODE可能是新的ASCII?.NET是UNICODE(就像Java一样)。Unicode是一种国际化的标准,它支持的不仅仅是无重音的拉丁字符;Windows developer文档将此术语用于键盘硬件发送的“代码”,其中包括非字符键,如F1、Home/End、Ins/Del等。因此,由于并非所有键都对应于ASCII(或Unicode)字符,我们需要区分“键码”(硬件)和“字符码”(ASCII或Unicode)。仅如果您的键盘布局为“US QWERTY”,则“适当地处理字母和数字”。第一个“按键”是否应表示“按键关闭”?