Vb.net 将多个PictureBoxes添加到阵列

Vb.net 将多个PictureBoxes添加到阵列,vb.net,Vb.net,因此,我总共有55个PictureBoxes,我正试图添加到一个数组中。它们的命名如下所示: Row1\u-Brick1,Row1\u-Brick2,直到Row1\u-Brick10 总共有10行,每行少1块砖 这就是我到目前为止所想到的使这项工作成功的方法: Dim bricks(0 To 54) As PictureBox 'Total of 55 Bricks Spread Out Private Sub Form1_Load(sender As System.Object, e As

因此,我总共有55个
PictureBox
es,我正试图添加到一个数组中。它们的命名如下所示:

Row1\u-Brick1
Row1\u-Brick2
,直到
Row1\u-Brick10

总共有10行,每行少1块砖

这就是我到目前为止所想到的使这项工作成功的方法:

Dim bricks(0 To 54) As PictureBox 'Total of 55 Bricks Spread Out

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    'Start of Loading 55 Bricks into the bricks() Array
    For i = 0 To 54
        For a = 1 To 10
            For am = 10 To 1 Step -1
                 bricks(i) = ("Row" & a & "_Brick" & am)
            Next
        Next 
    Next 
End Sub

任何关于如何做到这一点的想法都会很好

这是完全未经测试的,因为我太懒了,无法创建一个新项目并以与您相同的方式设置表单,但它应该很接近


这种按名称显式获取控件的方法将避免由于控件添加到窗体的顺序而导致的任何错误。

我建议使用锯齿状数组,其外观如下所示(请注意,这是0索引而不是1索引的,与控件名一样):

但是,如果您真的只需要一个数组,那么至少设置起来更容易(您可以将其简化为一行):

如果需要,您可以在
Where()
调用中输入名称与您的模式匹配的PictureBox,不过最好将这些控件放在可以用作父控件而不是窗体的公共面板或组框中。您还可以使用
Orderby()
调用来确保按正确的顺序返回PictureBoxes:

Dim bricks() As PictureBox

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    bricks = BrickPanel.Controls.
                OfType(Of PictureBox)().
                OrderBy(Function(pb) pb.Name). 'Naive OrderBy... 10 is before 2. I leave it to the OP to fix that part
                ToArray()
End Sub
如果您不使用Linq函数,诀窍是将结果数组索引作为内部循环的一部分递增,而不是单独使用一个循环:

 Dim bricks(54) As PictureBox

 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim i As Integer = 0
    For r As Integer = 1 To 10
         For c As Integer = 1 to 11 - r
             bricks(i) = Me.Controls("Row" & r & "_Brick" & c)
             i+=1
         Next c
    Next r
End Sub

对于am=10到1
可能应该是
对于am=10到1步骤-1
,否则它实际上不会倒计数。您在该表单上是否有其他具有不同名称的图片框,或者您的所有图片框都应该存储在数组中?Me.Controls.OfType(PictureBox)()。其中(函数(x)不是x.Name.StartsWith(“行”).ToArray()我想我没有看到问题。有错误吗?
bricks(I)=CType(Me.Controls(“Row”&a&“\u Brick”&am),PictureBox)
可能在分配给循环中的arr后增加索引。否则位置0为空,您将最终分配到位置55。
Dim bricks() As PictureBox

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    bricks = Me.Controls.OfType(Of PictureBox)().ToArray()
End Sub
Dim bricks() As PictureBox

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    bricks = BrickPanel.Controls.
                OfType(Of PictureBox)().
                OrderBy(Function(pb) pb.Name). 'Naive OrderBy... 10 is before 2. I leave it to the OP to fix that part
                ToArray()
End Sub
 Dim bricks(54) As PictureBox

 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Dim i As Integer = 0
    For r As Integer = 1 To 10
         For c As Integer = 1 to 11 - r
             bricks(i) = Me.Controls("Row" & r & "_Brick" & c)
             i+=1
         Next c
    Next r
End Sub