有没有办法可以使用变量来控制我在 Visual Basic 中使用的 PictureBox?
I.e.:
CurrentNumber = 1
PictureBox(CurrentNumber).backcolour = backcolour
您可以使用Me.Controls(String) https://msdn.microsoft.com/en-us/library/s1865435(v=vs.110).aspx索引器。它允许您指定要访问的控件的名称(作为字符串),因此您可以通过将字符串“PictureBox”与数字连接来动态访问图片框。
Dim TargetPictureBox As PictureBox = TryCast(Me.Controls("PictureBox" & CurrentNumber), PictureBox)
'Verifying that the control exists and that it was indeed a PictureBox.
If TargetPictureBox IsNot Nothing Then
TargetPictureBox.BackColor = Color.Red
End If
或者,通过避免每次调用时循环遍历整个控件集合来节省处理能力OfType()扩大 https://msdn.microsoft.com/en-us/library/bb360913(v=vs.110).aspx on Me.Controls
,将结果存储在按控件名称排序的数组中。这样它只需要迭代控制集合一次。
'Class level - outside any methods (subs or functions).
Dim PictureBoxes As PictureBox() = Nothing
'Doesn't necessarily have to be done in a button, it's just an example.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If PictureBoxes Is Nothing Then
PictureBoxes = Me.Controls.OfType(Of PictureBox).OrderBy(Function(p As PictureBox) p.Name).ToArray()
End If
'NOTE: CurrentNumber - 1 is necessary when using an array!
PictureBoxes(CurrentNumber - 1).BackColor = Color.Red
End Sub
NOTE:仅当您的所有图片框都命名为“PictureBox1”、“PictureBox2”等时,此解决方案才能正常工作。如果您突然跳过一个数字(“PictureBox3”、“PictureBox5”、“PictureBox6”),则PictureBoxes(CurrentNumber - 1)
for CurrentNumber = 5
会回来PictureBox6
而不是PictureBox5
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)