对不起,这是一个奇怪而愚蠢的问题,但我需要一个解决方案...
我有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 ...
答案 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资源