欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# WinForm中实现快捷键自定义设置实例

程序员文章站 2023-01-29 23:52:53
本文源码下载: 项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示: 当我们相继按下ctrl+alt+m的时候,软件就会自动将快捷键显示...

本文源码下载:

项目开发过程中,需要实现类似有道词典的软件设置中的自定义快捷键功能,如下图所示:

C# WinForm中实现快捷键自定义设置实例

当我们相继按下ctrl+alt+m的时候,软件就会自动将快捷键显示在文本框中。

最终的效果如下图所示:

C# WinForm中实现快捷键自定义设置实例

核心代码如下所示:

复制代码 代码如下:

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);
}