C# WinForm中实现快捷键自定义设置实例
程序员文章站
2023-01-29 23:52:53
本文源码下载:
项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示:
当我们相继按下ctrl+alt+m的时候,软件就会自动将快捷键显示...
本文源码下载:
项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示:
当我们相继按下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 <= 40) ||
(e.keyvalue >= 65 && e.keyvalue <= 90) || //a-z/a-z
(e.keyvalue >= 112 && e.keyvalue <= 123)) //f1-f12
{
keyvalue.append(e.keycode);
}
else if ((e.keyvalue >= 48 && e.keyvalue <= 57)) //0-9
{
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);
}