如何为Windows Forms窗体设置热键

25

我想在我的Windows Forms表单中设置热键。例如,Ctrl+N 用于新建表单,Ctrl+S用于保存。我该如何实现?

8个回答

59

设置

myForm.KeyPreview = true;

KeyDown 事件创建一个处理程序:

myForm.KeyDown += new KeyEventHandler(Form_KeyDown);

处理程序示例:

    // Hot keys handler
    void Form_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.S)       // Ctrl-S Save
        {
            // Do what you want here
            e.SuppressKeyPress = true;  // Stops other controls on the form receiving event.
        }
    }

3
你说得对,我忘记设置 KeyPreview 属性了,这在这种情况下是必要的。+1。 - Cheng Chen
很好的答案。请注意,使用较新的C#注册事件变得更加容易,例如this.KeyDown +=(object sender,KeyEventArgs e)=> Form_KeyPress(sender,e,true); this.KeyUp +=(object sender,KeyEventArgs e)=> Form_KeyPress(sender,e,false);将创建一个名为Form_KeyPress的处理程序,同时处理KeyDown和KeyUp - 使用附加的布尔变量告诉处理程序键是按下还是释放。它的签名是:Form_Press(object sender,KeyEventArgs e,bool pressed){...} - Matt

7
您还可以在您的派生自Form类型的类中重写ProcessCmdKey,如下所示:
protected override bool ProcessCmdKey(ref Message message, Keys keys)
{
    switch (keys)
    {
        case Keys.B | Keys.Control | Keys.Alt | Keys.Shift:
            // ... Process Shift+Ctrl+Alt+B ...

            return true; // signal that we've processed this key
    }

    // run base implementation
    return base.ProcessCmdKey(ref message, keys);
}

我认为这更适合于热键操作。不需要 KeyPreview


6
如果您的窗口有一个菜单,您可以使用 System.Windows.Forms.ToolStripMenuItemShortcutKeys 属性:
myMenuItem.ShortcutKeys = Keys.Control | Keys.S;

在Visual Studio中,你也可以在菜单项的属性页中进行设置。

2

我希望为表单添加一个KeyDown事件,并添加以下代码:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == (Keys.Control | Keys.N))
    {
        CreateNew();
    }
}

1
有没有人可以告诉我这个 CreateNew() 是什么?它是内置函数吗? - Riya
@riya7887:这只是一个例子,不是内置方法。你可以创建这样的方法并将所有相关代码放入其中。 - Cheng Chen

2

如果您想把它们链接到应用程序中的菜单项上,那么您不需要任何代码。只需在菜单项上设置快捷键属性即可,它将运行与您为菜单项点击配置的相同事件。


1

最新的回答已经是5年前了,我想在这里更新一下。具体针对菜单热键相关的问题部分,您可以通过设置MenuStrip.MenuItem对象的属性ShortcutKeys来进行操作。在Visual Studio中,您可以在窗体设计窗口中打开MenuStrip对象的属性,一旦滚动到ShortcutKeys属性,您可以使用VS界面来设置您的热键。

enter image description here

如果您想让一个 MenuStrip 在菜单项下面加下划线,需要在所需热键的字符前加上“&”符号。例如,如果您想要将“Exit”的“x”加下划线,则属性设置应为E&xit

enter image description here

这些属性操作应该产生类似于以下结果*: enter image description here 注意:要显示快捷键“Ctrl+N”,请将ShowShortcutKeys属性更改为true

0
首先,您需要处理KeyDown事件,然后才能开始关注您的修饰键:
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S)
    {
        //Do whatever
    }
}

当然,您需要确保您的表单订阅了KeyDown事件。

0

如果你想的话,也可以使用隐藏菜单来设置它。只需设置menu.visible = false;属性即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接