箭头键似乎不起作用?

时间:2013-10-06 21:19:41

标签: vb.net winforms

我正在尝试制作一个迷宫游戏但是这是我似乎无法开始工作的唯一代码。我希望图片框(播放器)按箭头键的方向移动。 我试过这段代码:

Private Sub BLevel1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    If e.KeyCode = 37 Then
        PictureBoxPlayer.Left = PictureBoxPlayer.Left - 10
    ElseIf e.KeyCode = 38 Then
        PictureBoxPlayer.Top = PictureBoxPlayer.Top - 10
    ElseIf e.KeyCode = 39 Then
        PictureBoxPlayer.Left = PictureBoxPlayer.Left + 10
    ElseIf e.KeyCode = 40 Then
        PictureBoxPlayer.Top = PictureBoxPlayer.Top + 10
    End If
End Sub

我也尝试了位置代码,但箭头键似乎没有移动图片框。这是我遇到的唯一问题。 关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

光标键是特殊的,它们用于将焦点从一个控件导航到另一个控件。所以他们通常在他们到达目前关注的控制之前被截获。此外,您为表单编写了一个KeyDown事件,当表单具有其他控件时它不会具有焦点,因此不会获得KeyDown事件。目前还不清楚这是否适用于此。

最好的方法是自己拦截光标键,然后才能在其他地方使用。您可以通过为表单的ProcessCmdKey()方法编写覆盖来实现此目的,如下所示:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    If keyData = Keys.Left Then
        PictureBoxPlayer.Left = Math.Max(0, PictureBoxPlayer.Left - 10)
        Return True
    ElseIf keyData = Keys.Right Then
        PictureBoxPlayer.Left = Math.Min(Me.ClientSize.Width - PictureBoxPlayer.Width, PictureBoxPlayer.Left + 10)
        Return True
    ElseIf keyData = Keys.Up Then
        '' etc..
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

我投入了代码以防止用户将播放器移出表单之外。通过编写Keys.Up和Keys.Down代码完成代码。

答案 1 :(得分:0)

为什么不尝试使用Listbox1,制作图像数组并将listbox1带回来以便无法看到,然后从图像文件夹的Folder Path中添加listbox1,看起来像是简单的图像查看器。 / p>

你可以试试这个

使用按钮或任何点击方法

    Dim myimg As Array
Private Sub img_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles img.Click
    If FolderBrowserDialog1.ShowDialog = DialogResult.OK Then
        myimg = IO.Directory.GetFiles(FolderBrowserDialog1.SelectedPath)
        ListBox1.Items.AddRange(myimg)
        ListBox1.SelectedIndex = 0
    End If
End Sub

然后在列表框中将选项卡索引设置为1 然后单击listbox1两次并插入此

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    Me.Refresh()
    Me.BackgroundImage = Nothing
    Me.BackgroundImage = Image.FromFile(ListBox1.SelectedItem.ToString)
End Sub

使用箭头键,图像会自动更改。 您可以将我更改为Picturebox。 希望它有所帮助