Контрольные массивы были концепцией конструктора VB6, которая не переносилась в .NET WinForms. Однако вы можете имитировать поведение, просматривая все элементы управления и проверяя, начинается ли имя с того же текста, а затем добавляются те, которые соответствуют массиву.
Я создал для вас метод расширения. Просто сохраните это как новый модуль в своем проекте и в любой форме, которую вы можете назвать.
Imports System.Runtime.CompilerServices
Public Module FormExtensions
<Extension()>
Public Function GetControlArray(Of TControl As Control)(extForm As Form, namePart As String, container As Control) As IEnumerable(Of TControl)
Dim controls = From control In container.Controls.OfType(Of TControl)
Where control.Name.StartsWith(namePart)
Select control
Dim containerSets = From control In container.Controls.OfType(Of Control)
Where control.Controls.Count > 0
Select GetControlArray(Of TControl)(extForm, namePart, control)
For Each item As IEnumerable(Of TControl) In containerSets
controls = controls.Union(item)
Next
Return controls
End Function
End Module
Теперь в вашей форме вы можете позвонить и через элементы управления. В этом примере я получаю все ярлыки, которые начинаются с определенного имени, а затем изменяют текст для соответствия. Порядок элементов управления основан на том порядке, в котором они были добавлены в форму.
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim controls = GetControlArray(Of Label)("MyLabel", Me)
For Each item As Label In controls
item.Text = "Found"
Next
End Sub
Этикетки я добавил в форму была названа как это (взято из конструктора сгенерированного кода)
Me.MyLabel1 = New System.Windows.Forms.Label()
Me.MyLabel2 = New System.Windows.Forms.Label()
Me.MyLabel3 = New System.Windows.Forms.Label()
Me.MyLabel4 = New System.Windows.Forms.Label()
Me.MyLabel5 = New System.Windows.Forms.Label()
Me.MyLabel6 = New System.Windows.Forms.Label()
Me.Label1 = New System.Windows.Forms.Label()
Me.Label2 = New System.Windows.Forms.Label()
Me.Panel2 = New System.Windows.Forms.Panel()
Me.MyLabel7 = New System.Windows.Forms.Label()
Me.Label4 = New System.Windows.Forms.Label()
Me.Label5 = New System.Windows.Forms.Label()
Вот фотография моего дизайнера с вложенным управлением контейнерным. Кроме того, до и после изображения формы.
Вы можете хранить имена в 'List (Of String) 'и использовать его в цикл через Me.Controls или сохранить ссылку на фактический контроль в' List (этикеточной) ' – Plutonix
Вот ссылка на вопрос, я думаю, похожа на то, о чем вы просите. Я использовал Linq в своем ответе. Также у оригинального плаката есть другой способ сделать то, что вы хотите. http://stackoverflow.com/questions/29832504/changing-the-text-of-all-the-buttons-on-a-form-in-vb-net/29832737#29832737 – Timmy
Ищите пример кода, все элементы управления и тест для «TextBox». Обратите внимание, что элемент управления и контейнер с другими элементами управления. Верхний уровень Me.Controls on возвращает верхний уровень. – rheitzman