表格不在keydown事件中读取箭头键

时间:2013-11-17 03:27:47

标签: vb.net

im编程一个表单,根据箭头键按下向左或向右移动一个图片框。我知道表单需要KeyPreveiw = True,并相应地设置。我的代码是:

Public Sub frmGame_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = Keys.A OrElse e.KeyCode = Keys.Left Then
        leftorright = -1
    End If
    If e.KeyCode = Keys.D OrElse e.KeyCode = Keys.Right Then
        leftorright = 1
    End If
    If e.KeyCode = Keys.W OrElse e.KeyCode = Keys.Up Then
        upordown = -1
    End If
    If e.KeyCode = Keys.S OrElse e.KeyCode = Keys.Down Then
        upordown = 1
    End If
End Sub

在这个区块中,WASD会相应地工作,但LRUD箭头根本不会触发。我尝试使用:

Msgbox(e.keycode.tostring())

显示他们是否开火,其他按钮工作(123,ABC等),箭头却没有。我对问题的猜测是我在表格上有按钮,他们正在为自己拿取按键(优先于表格)。在我的表格上我有3个按钮,当我按下时可以说向下箭头,我可以看到每个按钮突出显示通过三个。我该如何解决这个问题?提前谢谢!

编辑:删除按钮后,代码可以正常工作。如果可能的话,我需要弄清楚如何使表单优先于按钮:)

1 个答案:

答案 0 :(得分:3)

为您的表单覆盖ProcessCmdKey(),如下所示:

Public Class Form1

    Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
        Select Case keyData
            Case Keys.Up
                Debug.Print("Up")
                Return True ' <-- If you want to suppress default handling of arrow keys

            Case Keys.Right
                Debug.Print("Right")
                Return True ' <-- If you want to suppress default handling of arrow keys

            Case Keys.Down
                Debug.Print("Down")
                Return True ' <-- If you want to suppress default handling of arrow keys

            Case Keys.Left
                Debug.Print("Left")
                Return True ' <-- If you want to suppress default handling of arrow keys

        End Select
        Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

End Class