首页 > 解决方案 > 在不同的对象中使用不同的 KeyDown 事件,但在 vb.net 中以相同的形式

问题描述

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

   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 的其他事件。我必须单独单击按钮才能激活他们,然后事件正确注册。

可以同时激活两个吗?

标签: vb.netkeypresskeydown

解决方案


您编写了 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 仅适用于表单而不适用于按钮,您可以从那里调用所需的事件。


推荐阅读