在 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
设置为需要传递给x
和y
组成的字符串值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
所以我正在 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
设置为需要传递给x
和y
组成的字符串值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