我有一个Windows窗体,可以在ButtonClick事件中保存数据,但我还想在用户按下某些键盘快捷键时执行此事件,例如:
CTRL + S
保存。
我尝试过表单KeyDown event
和KeyPress 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)
答案 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。