2013-10-06 65 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。 希望它有幫助