2015-03-13 37 views
0

我正在创建一个游戏,如果用户在键盘上按下某个键,图片框将从特定方向移动。当用户按下箭头键时,我创建了一个处理Picturebox运动的类。这是这一点,但在PictureBox不向右移动当我实例化它的形式时,PictureBox不会在KeyDown上移动

Public Class movement 

    Public Function right() As Action 

     Dim myform As New Form3() 
     myform.PictureBox1.Left += 1 
     Return right 
    End Function 
End Class 

++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++

Public Class Form3 

    Public Sub Form3_KeyDown1(sender As Object, e As KeyEventArgs) Handles Me.KeyDown 
     Dim r As New movement 

     Select Case e.KeyCode 

      Case Keys.Right 
       r.right() 

     End Select 
    End Sub 


End Class 

但当我致电Form3直接在班级运动,图片框从右侧移动。我实例化表单的原因是因为我将使用不同形式的一些框架或大量图片框。

Public Class movement 

    Public Function right() As Action 


     Form3.PictureBox1.Left += 1 
     Return right 
    End Function 
End Class 
+0

您每次在按键关闭时都会创建一个'Form3'的新实例,但是您并未显示它。 – dbvega 2015-03-13 06:52:47

+0

那么,代码应该是什么样的我没有一个想法 – 2015-03-13 07:02:43

+0

如果你想要移动一个'图片框'在外部'窗体'你需要有一个'窗体'的实例存储,例如在一个私人领域。 – dbvega 2015-03-13 07:21:02

回答

0

最后我给你写了个例子。

Public Class FormTarget 
    Friend Sub LeftMovePictureBox(Optional ByVal offset As Integer = 1) 
     PictureBox1.Left += offset 
    End Sub 
    Friend Sub TopMovePictureBox(Optional ByVal offset As Integer = 1) 
     PictureBox1.Top += offset 
    End Sub 
End Class 

而且控制器:

Public Class FormController 
    ReadOnly _formTarget As New FormTarget 

    Protected Overrides Sub OnLoad(e As EventArgs) 
     _formTarget.Show() 
     MyBase.OnLoad(e) 
    End Sub 

    Protected Overrides Sub OnClosing(e As System.ComponentModel.CancelEventArgs) 
     _formTarget.Close() 
     MyBase.OnClosing(e) 
    End Sub 

    Private Sub FormController_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown 
     Dim speed As Double = 1D 
     If e.Modifiers = Keys.Control Then 
      speed = 10D 
     End If 
     Select Case e.KeyValue 
      Case Keys.Right 
       _formTarget.LeftMovePictureBox(1 * speed) 
      Case Keys.Left 
       _formTarget.LeftMovePictureBox(-1 * speed) 
      Case Keys.Up 
       _formTarget.TopMovePictureBox(-1 * speed) 
      Case Keys.Down 
       _formTarget.TopMovePictureBox(1 * speed) 
     End Select 
    End Sub 
End Class 

我希望它能帮助。

+0

您好,谢谢您的帮助,顺便说一句dbvega我仍然对您的代码感到困惑。我不知道我的Form3在哪里以及我的班级是如何移动我的图片盒的 – 2015-03-13 09:35:40

+0

@JohnPerez“FormController”是移动类,“FormTarget”是你的“Form3”。 – dbvega 2015-03-13 13:11:41

相关问题