2013-12-22 70 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

相關問題