如何将窗体上的每个 PictureBox 加载到数组中?

How do you load every PictureBox on a form into an array?

我目前正在尝试找到一种方法来更改表单上的每个 PictureBox 以具有相同的图像。 我已经实现了这个,但是它很乱,我想知道是否有 'cleaner' 方法来做到这一点(因为我稍后需要在我的项目中动态填充 PictureBox 数组)。

Dim pbxCollection() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, PictureBox4, PictureBox5, PictureBox6, PictureBox7, PictureBox8, PictureBox9} 'collection of all pictureboxes

For Each pbx In pbxCollection 'iterates through the PictureBox array and changes each value
   pbx.Image = My.Resources.<image file name here>
Next

上面的代码完成了我想要的,但是如您所见,我有 9 个图片框。将来我需要有最多 50 个任意数量的 PictureBox,所以这个解决方案将不再有效。

如果有办法将窗体上的每个图片框都填充到数组中,将不胜感激。

谢谢。

不要使用数组,使用 IEnumerable:

Dim pbxCollection = MyForm.Controls.OfType(Of PictureBox)()

当然这不是递归的,所以如果有一个面板或组框你想考虑使用它而不是 MyForm。另外,请确保 运行 在 InitializeComponent() 方法之后


来自评论:

I'm using a tableLayoutPanel

所以假设名称为 tableLayoutPanel1,它可能看起来像这样:

Dim pbxCollection = tableLayoutPanel1.Controls.OfType(Of PictureBox)()