在不同的对象中使用不同的 KeyDown 事件,但在 vb.net 中使用相同的形式

Using different KeyDown events in different objects but in the same form in vb.net

我有 2 个按钮,形式为“button1”和“button2”,我的两个按钮都有以下代码:

   Private Sub Button2_KeyDown(sender As Object, e As KeyEventArgs) Handles Button2.KeyDown
    Select Case e.KeyData
        Case (Keys.F5)
            MsgBox("F5 in button 2")
        Case (Keys.F6)
            MsgBox("F6 in button 2")
        
    End Select


End Sub


Private Sub Button1_KeyDown(sender As Object, e As KeyEventArgs) Handles Button1.KeyDown
    If e.KeyCode.Equals(Keys.F9) Then
        MsgBox("F9 in button 1")
    End If
End Sub

使用此代码,我正在尝试以相同的形式从键盘上使用不同的键激活两个不同的按钮。 问题是当我尝试按下不同对象的不同键时,只有其中一个正在注册事件。

示例:默认情况下,我认为按钮 2 已激活,因此每次我按 f5 和 f6 时,正确的消息显示都没有问题,但是当按 f9 键时实际上并没有触发按钮 1 的其他事件。我必须单击按钮分别激活它们,然后事件正确注册。

是否可以同时激活它们?

您编写了 2 个不同的 KeyDown 事件,因此如果活动控件是 button2,F5 和 F6 将起作用。如果活动控件是 button1,F9 将。

将表单的 KeyPreview 属性 设置为 true 并为表单创建另一个 KeyDown 事件,如下所示:

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Form1.KeyDown
    If e.KeyCode.Equals(Keys.F9) Then
        Button1_KeyDown(Me, e)
    End If
   Select Case e.KeyData
        Case (Keys.F5)
           Button2_KeyDown(Me, e)
        Case (Keys.F6)
           Button2_KeyDown(Me, e)
        
    End Select
End Sub

KeyPreview = TrueKeyDown 仅适用于表单而不适用于按钮,您可以从那里调用所需的事件。