Итеративное включение Visual Basic текстового поля

#vb.net #iteration

#vb.net #итерация

Вопрос:

Si Я работаю над заданием, в котором у меня есть 10 радиокнопок, указывающих, сколько у меня участников, и в зависимости от того, что я выбираю от 1 до 10, мне нужно, чтобы было включено столько соответствующих текстовых полей, чтобы я мог заполнить их именами!

Есть ли способ для меня создать цикл For между 1 и числом, которое я выбрал из RadioButton, и сказать что-то вроде

 For i = 0 to Size
{
    TextBoxamp;i.Enabled = True
}
  

Поскольку мои текстовые поля называются TextBox1 в TextBox10

Я знаю, что вы можете добавлять строки вместе, используя amp;, но как я могу сделать это для имени объекта?

На данный момент у меня буквально есть самый тупой способ сделать это, который представляет собой событие щелчка внутри каждой кнопки RadioButton, которое вручную включает правильное количество текстовых полей…

Заранее благодарю вас!

Ответ №1:

Вы можете выполнять итерации по всем элементам управления следующим образом:

 For Each ctr In Me.Controls
Dim indx As String = ctr.Name
If TypeOf (ctr) Is Textbox Then
 ' Now compare the name with TextBoxamp;i and do smth
End If
Next
  

Комментарии:

1. Большое спасибо! Похоже, это способ сделать это, используя элементы управления

2. Имейте в виду, что порядок может логически не соответствовать размещению элементов управления в форме. Если у вас есть такая проблема, вы можете создать свою собственную List(of Checkbox) , добавить флажки в этот список в нужном вам порядке и перебирать эту коллекцию вместо Controls Form .

Ответ №2:

Невозможно просто объединить строку и использовать ее в качестве ссылки на объектную переменную подобным образом, но вы можете выполнить поиск элементов управления формы по их свойству name (которое является строкой) и сделать это таким образом. Вот пример:

 Private Sub EnableTextBoxes(ByVal Size As Integer)
    For i As Integer = 1 To Size
        Dim matches() As Control = Me.Controls.Find("Textbox" amp; i.ToString, True)
        If matches IsNot Nothing AndAlso matches.Length = 1 Then matches(0).Enabled = True
    Next
End Sub