【发布时间】:2020-09-09 10:38:28
【问题描述】:
我正在制作一个带有 PictureBox 控件的程序。如果 PictureBox 控件已经在一个数组中,那么管理我想要对它们执行的操作将是最简单的。
这是我尝试过的。
Sub drawtiles()
For x As Integer = 0 To 32 Step 1
For y As Integer = 0 To 24 Step 1
Dim tile As New PictureBox()
tile.Width = 20
tile.Height = 20
tile.Top = y * 20
tile.Left = x * 20
tile.BackColor = Color.CornflowerBlue
Dim r As Random = New Random
' Get random numbers between 1 and 3.
' ... The values 1 and 2 are possible.
Dim s As Integer = (r.Next(1, 3))
If s = 1 Then
tile.BackgroundImage = My.Resources.g1774
Else
tile.BackgroundImage = My.Resources.rect881
End If
tiles(x)(y) = tile
Controls.Add(tile)
Next
Next
End Sub
...在这里制作数组
Public Class Form1
Public tiles As Array
那么,如何将 Picturebox 控件分配给 3d 数组值?
【问题讨论】:
-
将您的数组分配给公共字段是不明智的。无论你打算用它做什么,都不要。仅在该表单内使用数组。如果您需要从外部启动对该数组的处理,请提供一个可以调用的公共方法,然后在该方法中使用该数组。
-
也许有人想在他的回答中包含一个关于这个
tile.BackgroundImage = My.Resources.g1774的词。让它完美:) -
@JQSOFT,我本来是想提这个的,但可能不是因为你的意思。这并不是问题的症结所在,因此并不真正属于答案,但确实值得一提。首先,我猜您指的是几乎可以肯定该代码应该设置
Image属性而不是BackgroundImage属性的事实。不知道为什么这么多人似乎犯了这个错误,但这肯定至少部分是由于缺乏尽职调查,即他们显然没有费心阅读PictureBox控制。 -
我的另一点是代码几乎肯定不应该一遍又一遍地使用那些
My.Resources属性。这样做每次都会创建一个新的image对象,这是资源密集型的,几乎可以肯定不需要。相反,这些属性应该只使用一次,并将结果分配给变量,并且这些变量多次使用。这样,代码会创建两个Image对象,而不是其中的 825 个。 -
由于您已经硬编码了瓷砖数量 - 使用
TableLayoutPanel和所需数量的单元格(瓷砖)和PictureBox在其中控制。
标签: arrays vb.net winforms controls picturebox