0

2 つの方向キーを押したときにオブジェクトを斜めに移動するにはどうすればよいですか? どうやってするか?上と右を一緒に処理するための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
4

1 に答える 1

1

このKeyDownイベントは、1つのキーが押されるたびに発生します。KeyDownしたがって、あるカーソルキーが一度押されたときに、別のカーソルキーが押されているかどうかをチェックするために、いつカーソルキーが押されたかを覚えておく必要があります。

イベントをサブスクライブしKeyUpて状態をクリアすることを忘れないでください。使用すると、1つのカーソルキーを押して放し、次に別のカーソルキーを押す可能性があるためです。

あなたのコードは決して機能しません:

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

これは真実ではないからです。KeyCodeは単一のキーコードであり、1つのキーと別のキーの両方にすることはできません。

于 2013-03-09T09:07:06.707 に答える