Windows窗体.NET中的热键(非全局)

12 .net hotkeys winforms

在我的Windows窗体应用程序中,我希望每次按下它时都有一个特殊按钮来运行测试.有几十个控件,所以在每个控件中实现它需要花费太多时间.

有没有办法可以设置热键,无论我在应用程序中做什么,我都可以按键,它会触发我的事件?

Zac*_*son 15

您可以ProcessCmdKey在控件或表单中覆盖和处理热键.

来自MSDN:

ProcessCmdKey方法首先确定控件是否具有ContextMenu,如果是,则启用ContextMenu来处理命令键.如果命令键不是菜单快捷方式且控件具有父级,则该键将传递给父级的ProcessCmdKey方法.实际效果是命令键在控制层次结构中"冒泡".除了用户按下的键之外,键数据还指示与键同时按下哪些修改键(如果有的话).修饰键包括SHIFT,CTRL和ALT键.

例如:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    // if it is a hotkey, return true; otherwise, return false
    switch (keyData)
    {
        case Keys.Control | Keys.C:
            // do something
            return true;
        default:
            break;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}
Run Code Online (Sandbox Code Playgroud)