Перебирать текстовые поля в vb.net

Я помню, в vb6 вы могли создать массив текстовых полей.

Textbox1(0), Textbox1(1) ..... ,

Но в vb.net вы не можете создать массив? Итак, если у вас есть такой код . Можно ли установить его в цикл for?

        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
        TextBox5.Text = ""
        TextBox6.Text = ""
        TextBox7.Text = ""
        TextBox8.Text = ""
        TextBox9.Text = ""
        TextBox10.Text = ""
        TextBox11.Text = ""
        TextBox12.Text = ""
        TextBox13.Text = ""
        TextBox14.Text = ""
        TextBox15.Text = ""

person Anel Hodzic    schedule 02.06.2015    source источник
comment
Вы можете попробовать выполнить поиск в следующий раз. stackoverflow.com/questions/13504280/for-each-textbox-loop< /а>   -  person Justin Ryan    schedule 02.06.2015
comment
Также здесь, здесь и т. д...   -  person Justin Ryan    schedule 02.06.2015


Ответы (3)


Если элементы управления TextBox находятся только в основной форме, вы можете перебирать их в цикле:

For Each tb As TextBox In Me.Controls.OfType(Of TextBox)()
  tb.Text = String.Empty
Next

Если они находятся на панели, замените ключевое слово Me на название панели.

person LarsTech    schedule 02.06.2015
comment
Является ли OfType рекурсивным? Или он просто получает прямых детей? - person jwatts1980; 02.06.2015
comment
@jwatts1980 Не рекурсивный — это просто фильтр. - person LarsTech; 02.06.2015
comment
@ jwatts1980: - Это не рекурсивно! - person Rahul Tripathi; 02.06.2015

Вы можете создать список и прокрутить его:

Dim boxes As New List(Of TextBox)() From { _
    TextBox1, _
    TextBox2 _
}
boxes.Add(TextBox3)

For Each tb As TextBox In boxes
    tb.Text = ""
Next

Если у вас есть форма с элементами управления TextBox внутри других элементов управления, таких как Panel или GroupBox, вы можете попробовать использовать рекурсивную функцию, подобную этой, чтобы получить их все. (По сути, это преобразование C# в VB ответа здесь)

Private Function GetTextBoxes(root As Control) As IEnumberable(Of TextBox)
    Dim container = TryCast(root, ContainerControl)
    If container IsNot Nothing Then
        For Each c As Control In container.Controls
            For Each i As Control In GetTextBoxes(c)
                Yield i
            Next
        Next
    End If
End Function

Чтобы создать список из вашей основной формы:

Dim allBoxes As List(Of TextBox) = GetTextBoxes(Me).ToList()
person jwatts1980    schedule 02.06.2015

Для справки, вы МОЖЕТЕ создать массив объектов TextBox следующим образом:

Dim tbArray() As TextBox = New TextBox() {TextBox1, TextBox2, TextBox3}

Или объявите массив и прокрутите элементы управления TextBox, чтобы добавить их в него. Однако подход List(Of TextBox) будет работать просто отлично, если вам нужно сохранить их коллекцию или просто перебирать элементы управления TextBox в форме, если вам просто нужно установить свойства в одном подразделе или функции.

person RianBattle    schedule 02.06.2015