2015-04-28 2 views
0

В моей программе у меня есть 24 текстовых поля, которые пользователь использует для ввода. Я хочу присвоить содержимое каждого текстового поля индексу массива. Есть ли способ, которым я могу это сделать в цикле, без необходимости вводить strItems(0) = MainForm.txtEntry1.text каждый раз? Это написано на Visual Basic.Ссылка на другой элемент управления на каждой итерации цикла

Пример того, что я пытаюсь сделать:

For intCount = 0 to (strItems.length - 1) 
     strItems(intCount) = txtEntry[intCount + 1] 
    Next 
+0

Не то, что коллекция элементов управления вы работаете с является «контейнер» коллекцией. Только если все элементы управления находятся на поверхности формы, элементы управления будут находиться в Me.Controls. Как отметил Кевин, вы можете использовать суффикс имени, чтобы действовать как индекс. Свойство Tag также может быть полезно. – rheitzman

ответ

1

Если префикс вы все текстовые поля имен (например, textBoxArray1), вы можете затем цикл через все текстовые поля на форме и соответственно процесса , Нравится:

Dim ctrl As Control 

For Each ctrl In Me.Controls 
    If (ctrl.GetType() Is GetType(TextBox)) Then 
     If(ctrl.Name.StartsWith("textBoxArray") Then 
      'your code here 
     End If 
    End If 
Next 
+0

Спасибо! Определенно собираюсь сделать мою жизнь намного легче. –

+0

Вы также можете сказать: 'Если TypeOf ctrl TextBox Then'. – aphoria

+0

Используются оба предложения вашего парня. Текстовые поля были в групповом поле, поэтому сначала не работали. Есть ли способ сделать это с помощью текстовых полей в групповом поле? –

0

Вы можете использовать Linq для установки элементов управления в массив.

Dim Array() As TextBox = Me.Controls.OfType(Of TextBox)().Where(Function(c) c.Name.Contains("")).ToArray() 
Array.Reverse(Array) 

Где вы видите пустые кавычки, как сказал @Kevin, вы можете префикс своих имен, чтобы найти только то Textboxes и заполнить те, или Вы можете оставить это поле пустым, как у меня есть, и это будет индексировать каждое текстовое поле на вашу форму в массив.

Затем вы можете использовать что-то вроде этого, чтобы получить доступ к текстовому полю

Dim i As Integer = 0 
Array(i).Text = "Stuff" 
Смежные вопросы