项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示:
当我们相继按下ctrl+alt+m的时候,软件就会自动将快捷键显示在文本框中。
最终的效果如下图所示:
核心代码如下所示:
代码如下:
private void keydown(object sender, keyeventargs e)
{
stringbuilder keyvalue = new stringbuilder();
keyvalue.length = 0;
keyvalue.append();
if (e.modifiers != 0)
{
if (e.control)
keyvalue.append(ctrl + );
if (e.alt)
keyvalue.append(alt + );
if (e.shift)
keyvalue.append(shift + );
}
if ((e.keyvalue >= 33 && e.keyvalue (e.keyvalue >= 65 && e.keyvalue (e.keyvalue >= 112 && e.keyvalue {
keyvalue.append(e.keycode);
}
else if ((e.keyvalue >= 48 && e.keyvalue {
keyvalue.append(e.keycode.tostring().substring(1));
}
this.activecontrol.text = ;
//设置当前活动控件的文本内容
this.activecontrol.text = keyvalue.tostring();
}
private void keyup(object sender, keyeventargs e)
{
string str = this.activecontrol.text.trimend();
int len = str.length;
if (len >= 1 && str.substring(str.length - 1) == +)
{
this.activecontrol.text = ;
}
}
e.keyvalue和字符的对应关系
字符 e.keyvalue
a-z|a-z 65-90
f1-f12 112-123
0-9 48-57
pageup 33
pagedown 34
end 35
home 36
左(←) 37
上( ↑ ) 38
右(→) 39
下( ↓ ) 40
接着,为textbox控件分别设置_keydown和_keyup事件,并在其中调用以上2个核心函数。
如下所示:
代码如下:
private void textbox1_keydown(object sender, keyeventargs e)
{
keydown(sender, e);
}
private void textbox1_keyup(object sender, keyeventargs e)
{
keyup(sender, e);
}