在VB.NET中循环遍历文本框

3
我记得在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 = ""

1
下次你可以试着搜索一下。https://dev59.com/0WYr5IYBdhLWcg3wpbyQ - Justin Ryan
还有这里这里,等等... - Justin Ryan
3个回答

9
如果TextBox控件仅存在于主窗体上,则可以通过循环遍历它们:
For Each tb As TextBox In Me.Controls.OfType(Of TextBox)()
  tb.Text = String.Empty
Next

如果它们在一个面板中,则使用该面板的名称替换Me关键字。


OfType 是递归的吗?还是只获取直接子元素? - jwatts1980
1
@jwatts1980 不是递归的 —— 它只是一个过滤器。 - LarsTech
@jwatts1980:这不是递归! - Rahul Tripathi

2
你可以创建一个列表并循环遍历它:
Dim boxes As New List(Of TextBox)() From { _
    TextBox1, _
    TextBox2 _
}
boxes.Add(TextBox3)

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

如果您有一个包含在其他控件中(如Panel或GroupBox)的TextBox控件的表单,您可以尝试使用类似于这样的递归函数来获取它们。 (这基本上是答案hereC#转VB转换
Private Function GetTextBoxes(root As Control) As IEnumerable(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()

2
参考下面的方法,你可以创建一个文本框对象的数组: Dim tbArray() As TextBox = New TextBox() {TextBox1, TextBox2, TextBox3} 或者,声明该数组并循环遍历文本框控件将其添加到其中。然而,如果需要维护一个文本框对象集合,或者只需在一个子程序或函数中设置属性,则使用List(Of TextBox)方法同样有效,或者只需在窗体上循环遍历文本框控件也可以。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接