对不起,这是一个奇怪而愚蠢的问题,但我需要一个解决方案...
我有30个文本框命名为Txt1,Txt2,Txt3,...,Txt30
我必须填写文本框为Txt1.text = 0按钮单击..
有没有像
On Button Click 这样的方法
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
Run Code Online (Sandbox Code Playgroud)
或者我必须写出所有30行
Txt1.text = 0
...
Txt30.text = 0
Run Code Online (Sandbox Code Playgroud)
我不知道这个问题怎么问,也许问题不合适.
Thanx提前......
如果文本框全部包含在Form的Controls集合中,那么很容易遍历它们
For Each(t in Me.Controls.OfType(Of TextBox)())
t.Text = "0"
Run Code Online (Sandbox Code Playgroud)
当然,这种方法的优点是,如果您在表单中添加其他文本框,则无需担心.它们将使用foreach循环找到,而没有固定的上限.
并且,如果不是所有文本框都应包含在循环中,那么您只需使用要使用的文本框的Tag属性即可.例如,如果将Tag属性设置为字符串"Y",则可以更改foreach循环以仅查找具有匹配Tag属性的控件
For Each t in Me.Controls.OfType(Of TextBox)() _
.Where(Function(x) x.Tag = "Y")
t.Text = "0"
Run Code Online (Sandbox Code Playgroud)
如果所有文本框都包含在同一个容器(Form,GroupBox或Panel)中,那么上面的两个解决方案很有效,相反,如果这些文本框分散在不同的容器中(一些在组框中,另一些在面板中等),那么你可以构建一个List(Of TextBox)变量用文本框实例填充它并在需要时使用它
Dim myTexts = New List(Of TextBox)() From { Txt1, Txt2, Txt3, ....}
Run Code Online (Sandbox Code Playgroud)
并循环遍历此变量
你可以像史蒂夫所说的那样做,但如果你有其他你不想编辑的文本框,那么还有另一种方式:
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
Run Code Online (Sandbox Code Playgroud)
例如GroupBox,如果您的文本框都在同一个控件中,则可以GroupBox.Controls.Find节省CPU资源