如何设置按钮单击事件的键盘快捷键?

时间:2013-12-02 11:03:00

标签: c# .net vb.net winforms

我有一个Windows窗体,可以在ButtonClick事件中保存数据,但我还想在用户按下某些键盘快捷键时执行此事件,例如: CTRL + S 保存。 我尝试过表单KeyDown eventKeyPress event,但他们不会开火。 我想我错过了一些东西。

 Private Sub frmExchangeSymbolMapping_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
        If Asc(e.KeyChar) = Keys.Control AndAlso Asc(e.KeyChar) = Keys.E Then
            MessageBox.Show("Testing")
        End If
    End Sub

我也会接受c#的答案(如果可以使用在线工具将其转换为vb:P)

4 个答案:

答案 0 :(得分:5)

将表单的KeyPreview property设置为true。这将首先使用表单本身注册所有关键事件,如果没有找到快捷方式,则使用当前关注的组件注册。

答案 1 :(得分:1)

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
    Select Case msg.Msg
        Case &H100, &H104
            Select Case keyData
                Case Keys.Control Or Keys.E
                  MessageBox.Show("Control + E Pressed")
                  Exit Select
            End Select
      Exit Select
    End Select
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

答案 2 :(得分:0)

我的解决方案位于 C#

1。将您的Form KeyPreview媒体资源设为true
2。订阅KeyDown的{​​{1}}活动,如下所示:

Form

3。处理this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown); KeyDown事件,如下所示:

Form

完整代码:

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Control  && e.KeyCode == Keys.S)
            MessageBox.Show("Ctrl + S pressed!");
    }

答案 3 :(得分:0)

如果您将按钮的文字设置为& Save Alt-S将单击该按钮,假设没有菜单拦截Ctrl-S。