在 Visual Basic 中访问多个 PictureBoxes(或任何窗体控件)?

Accessing multiple PictureBoxes (or any form control) in Visual Basic?

所以我正在 VB 中制作游戏以用于学习目的,现在我正在努力解决这个问题:

我正在尝试执行绘制关卡图的 For 循环。但是,我似乎无法弄清楚。这是我正在尝试做的一个例子:

For index as integer = 1 to 192
    PictureBox(index).Image = bg(map(x,y)) 'this is causing me problems
    x=x+1
    if x=16 then
        x=0
        y=y+1
    End If
Next

但由于 PictureBox(index).Image 似乎不是正确答案,它只是抛出一个错误。

有什么办法吗?

编辑:

很快,我需要像这样将 PictureBox.Image 从 1 设置为 192 而无需 192 行代码:

PictureBox1.Image = bg(map(0,0))
PictureBox2.Image = bg(map(1,0))
PictureBox3.Image = bg(map(2,0))
PictureBox4.Image = bg(map(3,0))
'etc....

相反,我不想将它们设置在 For 循环中。我不想有多余的代码行。

编辑 2:

图片框已添加到编辑器中。

我将在这里做一个巨大的假设,并假设您在到达此代码之前已经在表单上拥有 PictureBox,并且它们具有 Id 的 PictureBox1 到 PictureBox192。代码如下所示。您需要:
1. 通过 ID
检索元素 2. Cast/convert 它从一个对象到一个 PictureBox
3. 适当地设置它的Image 属性。

Dim pBox As PictureBox ' To store each pic box in
For index as integer = 1 to 192
    pBox = Me.Controls.Find(PictureBox&&index) ' Try to find pic box by ID
    If Not pBox Is Nothing Then ' If able to find element by this ID
        DirectCast(pBox, PictureBox).Image = bg(map(x,y))
    End If
    x=x+1
    if x=16 then
        x=0
        y=y+1
    End If
Next

在设计器中将每个PictureBox的属性Tag设置为需要传递给xy组成的字符串值map 函数

例如:

  • PictureBox1 应将标签 属性 设置为“0,0”
  • PictureBox2 将标签 属性 设置为“1,0”,
  • .....
  • PictureBox17 将标记 属性 设置为“0,1”

依此类推,直到您用正确的值映射了所有图片框。

那么你的代码可以改成

' Assuming the PictureBox are all childs of the Form
For Each pic in Me.Controls.OfType(Of PictureBox)()

    Dim tag = pic.Tag

    ' You could omit this check if you have only the pictureboxes
    ' set with a valid Tag property 
    if Not string.IsNullOrEmpty(tag) Then
       Dim xyCoords = tag.ToString().Split(","c)
       pic.Image = bg(map(Convert.ToInt32(xyCoords(0), 
                          Convert.ToInt32(xyCoords(1))))
    End if
Next