按钮的键盘快捷键

Tim*_*m S 18 c# keyboard shortcut winforms

在C#(Microsoft Visual Studio 2010)中,如何为按钮分配键盘快捷键,如下所示?

    private void closeButton_Click(object sender, EventArgs e)
    {
        // Close the program
        this.Close();
    }
Run Code Online (Sandbox Code Playgroud)

我知道我可以在按钮的文本中使用"&"字符并创建一个Alt- n快捷方式,但我想创建一个按键快捷方式,例如c执行上述操作.

dkn*_*ack 14

的KeyDown是你的朋友;)例如,如果你想要的快捷键A同时Shift按下时,试试这个:

    void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.A && e.Shift) 
            // Do something
    }
Run Code Online (Sandbox Code Playgroud)

如果你想要一个"真正的"键盘快捷键,你可以使用钩子.看看Stack Overflow问题RegisterHotKeys和全局键盘钩子?.

  • 对不起,我无法理解你;)请用其他的话说.提前致谢 (3认同)
  • @dknaack:我认为你的代码可以工作,表单的`KeyPreview`属性必须设置为`true`. (3认同)

The*_*rga 8

这是一种不同的方法:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch(keyData)
    {
         case Keys.F2:
             // do something...
             return true;
         case Keys.F3:
             // do something...
             return true;
         case Keys.F4:
             // do something...
             return true;
         default:
             return base.ProcessCmdKey(ref msg, keyData);
    }            
}
Run Code Online (Sandbox Code Playgroud)

您无需更改KeyPreview值.


小智 5

如果你想在 switch 语句中添加Ctrl+ S,那么你也可以尝试下面的代码。

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        switch (keyData)
        {
            case Keys.Control | Keys.S:
                // do something...
                return true;
            case Keys.Control |Keys.Alt | Keys.S:
                // do something...
                return true;
            case Keys.F2:
                // do something...
                return true;
            case Keys.F3:
                // do something...
                return true;
            case Keys.F4:
                // do something...
                return true;
            default:
                return base.ProcessCmdKey(ref msg, keyData);
        }
    }
Run Code Online (Sandbox Code Playgroud)