Вы не можете ссылаться на объекты кнопок, используя строковое представление их имен. Вместо использования buttonNames
(который я предполагаю, это массив строк), используйте массив кнопок и добавьте к ним каждую кнопку. Затем выполните цикл по этому массиву (как вы сделали здесь), установив флажок enable = false для каждого из них.
Поэтому перед созданием каждого графического блока объявите массив для их хранения:
Dim MyPictureBoxes() as PictureBox
Затем при создании каждого из них добавьте их в массив. Когда вы закончите создавать их, вы можете отключить их следующим образом:
For Each MyPictureBox In MyPictureBoxes
Debug.Print(MyPictureBox.Name)
MyPictureBox.enabled = False
Next
Я создал форму с двумя кнопками, cmdGo и cmdDisable, чтобы продемонстрировать это более полно:
Public Class Form1
Dim MyPictureBoxes(4) As PictureBox
Private Sub cmdGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdGo.Click
Dim personAvatar As New PictureBox
Dim intX As Integer = 0
While intX < 5
personAvatar = New PictureBox
With personAvatar
.AutoSize = False
.Left = intX * 100
.Top = 100
.Name = "cmd" & intX
.Size = New System.Drawing.Size(100, 100)
.TabStop = False
.Text = ""
.BorderStyle = BorderStyle.FixedSingle
.BackgroundImageLayout = ImageLayout.Center
.BackColor = Color.LightGray
.BringToFront()
End With
Me.Controls.Add(personAvatar)
MyPictureBoxes(intX) = personAvatar
intX = intX + 1
End While
End Sub
Private Sub cmdDisable_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDisable.Click
For Each MyPictureBox In MyPictureBoxes
Debug.Print(MyPictureBox.Name)
MyPictureBox.Enabled = False
Next
End Sub
End Class
Обратите внимание, как MyPictureBoxes
ограничен для всей формы, так что он доступен для обеих подпрограмм.