2013-12-22 45 views
2

所以我宣布pictureboxes的一类范围,像这样的数组:阵列pictureboxes的(我这样做对吗?)

Dim picArray() As PictureBox = {Me.pic1, Me.pic2, Me.pic3} 

其中PIC1,PIC2和PIC3是pictureboxes那些已经在窗体上。

按钮事件然后执行以下操作。

For Each pic As PictureBox In picArray 
     pic.Left += 15 
    Next 

我预期的代码单击该按钮时,所有pictureboxes向右移动,但时出现错误,说我应该声明pictureboxes如新。我该怎么办?

+0

您可以访问它们作为窗体儿童(form.controls集合) – qwr

+0

可能的重复http://stackoverflow.com/questions/5299435/how-to-create-control-arrays-in-vb-net – qwr

回答

1

的问题是,你声明数组内联。在这种情况下数组对象是没有的。我自己不知道为什么。该解决方案是将数组初始化的Form.Load事件是这样的:

Public Class Form1 

    Dim pbs() As PictureBox 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     For Each p As PictureBox In pbs 
      p.Left += 15 
     Next 
    End Sub 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     pbs = {Me.PictureBox1, Me.PictureBox2, Me.PictureBox3} 
    End Sub 

End Class 

这工作。创建一个控件数组以便快速调整循环中各种类似控件的设置通常很不错,但通常我只是在子控件中本地创建数组。

+0

我在加载事件中初始化它,它工作。谢谢! – user2027369

+0

您应该将其标记为已回答,然后将其视为其他人。 – Jens

0

你已经有形式的图片框。所以不需要创建图片框阵列。如果您是动态创建控件那么只有你应该在编码..

使用下面的编码指定图片框,将所有的图片框在你形成

For Each pic As Control In Me.Controls 
     If TypeOf (pic) Is PictureBox Then 
      pic.Left += 15 
     End If 
    Next 
+0

@ user2027369有你用上面的代码尝试过我说的? – Haji

1

在作出PIC阵列代替。

你为什么不以这种方式使用目前的形式已经可用图像boxs:

For Each pic As Control In Me.Controls 
    If TypeOf pic Is PictureBox Then 
     pic.Left += 15 
    End If 
Next 

当你想移动所有的PIC这会更有帮助

+0

我可以做到这一点。但遗憾的是,这是功课,我们的教练希望我们在这个上使用数组。 – user2027369

相关问题