VB.NET使用键对角移动对象

时间:2013-03-09 08:59:30

标签: vb.net

如何在按下两个方向键时对角移动对象?怎么做? 我尝试在一起处理向上和向右添加elseif语句但是当我将它们按在一起时它仍然向上或向右移动

  Private Sub Form1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown
    If e.KeyCode = Keys.Right Then
        Label1.Location = New Point(Label1.Location.X + 5, Label1.Location.Y)

    ElseIf e.KeyCode = Keys.Left Then
        Label1.Location = New Point(Label1.Location.X - 5, Label1.Location.Y)

    ElseIf e.KeyCode = Keys.Down Then
        Label1.Location = New Point(Label1.Location.X, Label1.Location.Y + 5)

    ElseIf e.KeyCode = Keys.Up Then
        Label1.Location = New Point(Label1.Location.X, Label1.Location.Y - 5)

    ElseIf e.KeyCode = Keys.Up And e.KeyCode = Keys.Right Then
        Label1.Location = New Point(Label1.Location.X + 5, Label1.Location.Y + 5)
    End If

    CheckIntersections()
    If Label1.Location.Y < 0 Then
        Label1.Location = New Point(Label1.Location.X, Me.Height)
    ElseIf Label1.Location.Y > Me.Height Then
        Label1.Location = New Point(Label1.Location.X, Me.Bottom = 0)
    ElseIf Label1.Location.X < 0 Then
        Label1.Location = New Point(Me.Width, Label1.Location.Y)
    ElseIf Label1.Location.X > Me.Width Then
        Label1.Location = New Point(0, Label1.Location.Y)
    End If
End Sub

1 个答案:

答案 0 :(得分:1)

每次按下一个键时都会发生KeyDown事件。因此,您需要记住在KeyDown出现时按下光标键的时间,以检入另一个按下的光标键。

请记住订阅KeyUp个事件以清除状态,因为使用时可以按一个光标键,释放它然后按另一个。

您的代码永远不会有效:

ElseIf e.KeyCode = Keys.Up And e.KeyCode = Keys.Right Then

因为这不可能是真的。 KeyCode是单个密钥代码,它不能同时是一个密钥。