尝试使用键盘而文本框在屏幕上

时间:2017-08-16 12:34:38

标签: vb.net visual-studio-2017

在Visual Basic中,我尝试使用键盘(' W'' S'键和上下箭头)在我的乒乓球游戏中移动2个图片框。

如果屏幕上有任何按钮或文本框,他们将无法移动,但是当我移除按钮/文本框时它们将会移动。我认为这可能与能够使用箭头键在它们之间导航有关,但我不知道如何阻止它发生。

1 个答案:

答案 0 :(得分:0)

使用这些事件向上,向下移动

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown
    Select Case e.KeyCode
        Case Keys.Up
            moveUp()
            e.Handled = True
        Case Keys.Down
            moveDown()
            e.Handled = True
    End Select
End Sub

Private Sub Form1_PreviewKeyDown(sender As Object, e As PreviewKeyDownEventArgs)
    Select Case e.KeyCode
        Case Keys.Up
            moveUp()
        Case Keys.Down
            moveDown()
    End Select
End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles MyBase.KeyUp
    Select Case e.KeyCode
        Case Keys.Up, Keys.Down
            stopMoving()
            e.Handled = True
    End Select
End Sub

Private Sub moveUp()
    Me.Text = "Moving Up"
End Sub
Private Sub moveDown()
    Me.Text = "Moving Down"
End Sub
Private Sub stopMoving()
    Me.Text = "Idle"
End Sub

你也可以使用相同的事件来处理文本框和按钮。以编程方式添加处理程序

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    For Each c As Control In Me.Controls
        AddHandler c.KeyDown, AddressOf Form1_KeyDown
        AddHandler c.PreviewKeyDown, AddressOf Form1_PreviewKeyDown
        AddHandler c.KeyUp, AddressOf Form1_KeyUp
    Next
End Sub

注意:它只会直接在表单上添加处理程序到控件,而不是容器内的控件。但是,无论多么容易埋在容器中,您都可以使用扩展方法来获取所有孩子。见https://stackoverflow.com/a/21388034/832052

相关问题