C#中关于键盘按下事件,高手请进.
在窗体的KeyDown事件中怎么可以获取按下的键对应的字符?就像在KeyPress事件中的KeyChar一样.KeyDown事件中没有这个方法.有个KeyValue方法,...
在窗体的KeyDown事件中怎么可以获取按下的键对应的字符?
就像在KeyPress事件中的KeyChar一样.
KeyDown事件中没有这个方法.有个KeyValue方法,它获取的是键盘值,而不是对应的字符.
请问一下怎么可以把这个键盘值转换成对应的字符吗? 或者是在KeyDown事件中获取用户按下的键的字符..最好是可以把KeyValue获取的键盘值转换成对应的字符,我听说有一个API函数可以转换,但我不知道是什么,还请高手指教..
分不够的说一声,小弟还可以另加分,不过得要能解决问题...
另外提醒大家一下,在KeyDown事件中.KeyValue,KeyCode,KeyData获取的值不是真正的键所对应的字符.这点请大家不要弄混了.. 展开
就像在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() ;
//正常情况只返回一个字符。也有双字符的,但第一个才是我们关心和使用的。
}
}
}
在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() ;
//正常情况只返回一个字符。也有双字符的,但第一个才是我们关心和使用的。
}
}
}
展开全部
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if(e.KeyCode == Keys.F1)
{
这里面就可以写当按下F1时,要调用的方法
}
}
e.KeyCode //获取按键事件的值
Keys.F1 //对应的按键
{
if(e.KeyCode == Keys.F1)
{
这里面就可以写当按下F1时,要调用的方法
}
}
e.KeyCode //获取按键事件的值
Keys.F1 //对应的按键
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
个按键精灵就可以了啊 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)
{
}
事件是这样的吧?那好。
回答者:陇东吴大哥 - 千总 四级 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)
{
}
事件是这样的吧?那好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
char keyChar=char(keyValue);
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按时
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询