2013-10-06 66 views
0

我想做一个迷宫游戏,但是这是我似乎无法工作的唯一代码。我想要图片盒(播放器)按箭头键的方向移动。 我曾尝试这样的代码:箭头键似乎不起作用?

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 

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

+0

为什么你没有在这个例子中使用键枚举? http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.keycode(v=vs.100).aspx?cs-save-lang=1&cs-lang=vb#code-snippet -2 – Aybe

回答

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代码来完成代码。

0

为什么不尝试使用Listbox1,制作一个图像数组,然后将listbox1放回原来不能看到的位置,然后从图像文件夹的文件夹路径中添加listbox1,看起来就像是简单的图像查看器。

你可以试试这个

使用按钮或者任何与点击方法

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 

然后Tab键索引设置为1,在列表框 然后单击两次为ListBox和插入此

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。 希望它有帮助