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个按钮,当我按下时可以说向下箭头,我可以看到每个按钮突出显示通过三个。我该如何解决这个问题?提前谢谢!
编辑:删除按钮后,代码可以正常工作。如果可能的话,我需要弄清楚如何使表单优先于按钮:)
答案 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