C#中关于键盘按下事件,高手请进.

在窗体的KeyDown事件中怎么可以获取按下的键对应的字符?
就像在KeyPress事件中的KeyChar一样.
KeyDown事件中没有这个方法.有个KeyValue方法,它获取的是键盘值,而不是对应的字符.

请问一下怎么可以把这个键盘值转换成对应的字符吗? 或者是在KeyDown事件中获取用户按下的键的字符..最好是可以把KeyValue获取的键盘值转换成对应的字符,我听说有一个API函数可以转换,但我不知道是什么,还请高手指教..

分不够的说一声,小弟还可以另加分,不过得要能解决问题...
另外提醒大家一下,在KeyDown事件中.KeyValue,KeyCode,KeyData获取的值不是真正的键所对应的字符.这点请大家不要弄混了..

哎,的确没注意到。失误。这个键盘扫描码值和字符值还不是很简单能转换的,这和系统、语言、键位分布关系密切。直接使用转换还的确不能广泛适用。该这样,知错能改,莫怪、莫怪哈。

在FORM代码文件头部添加引用:
using System.Runtime.InteropServices ;

在FROM类中添加以下API函数引用:
[DllImport("user32.dll", CharSet=CharSet.Ansi)]
private static extern int ToAscii(int uVirtKey,int uScanCode,byte[] lpKeyState,int[] lpChar,int uFlags);

[DllImport("user32.dll", CharSet=CharSet.Ansi)]
private static extern int GetKeyboardState(byte[] pbKeyState);

在KyeDown代码中按如下示例使用:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{byte[] kb_state=new byte [256];
int[] charbuf=new int[4];

if (GetKeyboardState(kb_state)>0)
{
if (ToAscii(e.KeyValue,e.KeyValue,kb_state,charbuf,2)>0)
{
this.Text=Convert.ToChar(charbuf[0]).ToString() ;
//正常情况只返回一个字符。也有双字符的,但第一个才是我们关心和使用的。
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2007-06-18
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode == Keys.F1)
{
这里面就可以写当按下F1时,要调用的方法
}

}
e.KeyCode //获取按键事件的值
Keys.F1 //对应的按键
第2个回答  2007-06-18
个按键精灵就可以了啊 f
回答者:陇东吴大哥 - 千总 四级 6-18 17:12

弄个按键精灵就可以了啊
回答者:碎纸飞扬 - 举人 四级 6-18 17:12

这样可以吗?
char keyChar=char(keyValue);
回答者:hatum - 助理 二级 6-18 17:15

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
事件是这样的吧?那好。
第3个回答  2007-06-18
char keyChar=char(keyValue);
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
第4个回答  2007-06-18
按时
相似回答
大家正在搜