使用For循环

时间:2016-08-30 13:25:27

标签: vb.net winforms

对不起,这是一个奇怪而愚蠢的问题,但我需要一个解决方案...

我有30个文本框,命名为Txt1,Txt2,Txt3,...,Txt30
我必须在按钮点击时将文本框填充为Txt1.text = 0

有没有像On On Button点击

的方法
Dim i as Integer
For i = 1 to 30  '----- Possible in string but don't know if possible in textboxes
Txt(i).text = 0
Next

或者我必须写出所有30行,如

Txt1.text = 0
...
Txt30.text = 0

我不知道这个问题是怎么回事,也许是问题不合适 Thanx in Advance ...

2 个答案:

答案 0 :(得分:7)

如果文本框全部包含在Form的Controls集合中,那么很容易遍历它们

For Each(t in Me.Controls.OfType(Of TextBox)())
   t.Text = "0"

当然,这种方法的优点是,如果您在表单中添加其他文本框,则无需担心。它们将使用foreach循环找到,而没有固定的上限。

并且,如果不是所有文本框都应包含在循环中,那么您只需使用要使用的文本框的Tag属性即可。例如,如果将Tag属性设置为字符串“Y”,则可以更改foreach循环以仅查找具有匹配Tag属性的控件

For Each t in Me.Controls.OfType(Of TextBox)() _ 
                         .Where(Function(x) x.Tag = "Y")
   t.Text = "0"

如果所有文本框都包含在同一个容器(Form,GroupBox或Panel)中,那么上面的两个解决方案很有效,相反,如果这些文本框分散在不同的容器中(某些容器位于组框中,其他容器位于面板中等),那么您可以构建一个List(Of TextBox)变量,用文本框实例填充它,并在需要时使用它

Dim myTexts = New List(Of TextBox)() From  { Txt1, Txt2, Txt3, ....}

循环遍历此变量

答案 1 :(得分:5)

你可以像史蒂夫所说的那样做,但是如果你有其他你不想编辑的文本框,那么还有另一种方式:

For i = 1 to 30
    dim found = Me.Controls.Find("Txt" & i, True) '<- the True argument is for recursive search
    If Not IsNothing(found) AndAlso found.Length > 0 Then
        found(0).Text = "0"
    End If
Next

如果您的文本框都在同一个控件中,例如GroupBox,则可以GroupBox.Controls.Find节省CPU资源