在某些情况下我使用 For。
首先要知道你需要什么文本框或任何组件。
其次是要知道文本框(或任何其他组件)是在窗体(根)内还是在其他组件(如面板、组框、标签页)内……以及它们是否在其他组件内。
Example1: Form - GroupBox(x) - TabControl(y) - TabPage(z) - TextBox(n)
Example2: 表单---TextBox(x)
示例 3: 表单 - GroupBoox(x) - Panel(y) - TextBox(n)
等等。
您可以创建一些动画子/函数来完成更详细的事情。有两点很重要:
组件的路径(参见前面的示例)
组件的编号。如果您遵循示例 3,可能会是这样:
Form1 – GroupBox2 – Panel1 – TextBox3
重要提示:这些是组件的名称,您需要将它们全部枚举出来。
按照您的要求进行操作的简单方法是:
Public Sub CountTextBoxesAndClear(ByVal FormName As String, Optional ByVal myObject As Object = Nothing)
Dim ArrayTextBoxName() As String
Dim myTextBox As New TextBox
Dim nTBOX As Integer
'Path of component
If myObject = Nothing Then myObject = My.Application.OpenForms.Item(FormName)
'Bucle
For i As Integer = 0 To myObject.Controls.Count - 1
If myObject.Controls(i).GetType Is GetType(TextBox) Then
'Counting
nTBOX += 1
'Redim array
ReDim Preserve ArrayTextBoxName(nTBOX)
'Get Component
ArrayTextBoxName(nTBOX) = "TextBox" & nTBOX
'Get Path
myTextBox = myObject.Controls.Item(ArrayTextBoxName(nTBOX))
'myTextBox = myObject.Controls.Item("TextBox" & nTBOX) '<< the same of above line
Try
'Clear TextBoxes
myTextBox.Clear()
Catch ex As NullReferenceException
'A TextBox is Null, no error message
End Try
End If
Next
End Sub
FormName 是表单的名称,带引号,例如“Form1”。
myObject 是包含文本框的对象,如果文本框位于名为 Panel1 的 Panel 内,则必须编写 Panel1(不带引号)。
Try/Catch:也许你需要Textbox1、TextBox2、Textbox4、Textbox5、AnotherTextBox1、AnotherTextBox2。
然后你打电话给你的潜艇:
CountTextBoxesAndClear("Form1")
如果文本框位于名为 Panel1 的面板中:
CountTextBoxesAndClear("Form1", Panel1)
您必须拥有文本框的总数,但仅对名为 TextBox[x] 的文本框清除(或执行任何操作)。
Try/Catch 管理错误,因为 TextBox3 不存在。但是,正确的方法是 Textbox1、TextBox2、Textbox3、Textbox4、AnotherTextBox1、AnotherTextBox2 并在您的子/函数中设置限制。
例如:
Public Sub CountTextBoxesAndClear(ByVal FormName As String, Optional ByVal myObject As Object = Nothing, Optional byval start as integer = 0, Optional byval finish as integer = 0)
[…tracatra…]
For i As Integer = start To finish
[…tratra…]
Next
End Sub
这是如何调用的:
CountTextBoxesAndClear("Form1", Nothing, 1, 4)
现在,您可以研究一下如何创建子函数/函数以了解组件的正确路径,并获取文本框、标签、组合框、复选框的内容和属性……
其他信息:
如果您在 VisualStudio 中工作,您就会知道,如果您更改组件的名称,所有代码都会自动更改。如果您使用 start/finish 变量作为数字,这是一个大问题,因为当您需要添加/删除或移动位置时,您必须手动更改函数中的所有开始/完成值,例如:
CountTextBoxesAndClear("Form1", Nothing, 8, 12)
现在您需要在八个位置添加一个新的 TextBox 并移动一个。你的潜艇看起来像这样:
CountTextBoxesAndClear("Form1", Nothing, 9, 13)
您可以创建一个将组件名称转换为整数的简单函数(此函数仅适用于两位数(0到99):
Public Function ObjToInt(ByVal IntObject As Object) As Integer
If IntObject IsNot Nothing Then
Dim ref As Integer = Val(IntObject.Name.Substring(IntObject.Name.Length - 2))
If ref = 0 Then
ref = Val(IntObject.Name.Substring(IntObject.Name.Length - 1))
End If
Return ref
Else
Return 0
End If
End Function
你的子可能是这样写的:
CountTextBoxesAndClear("Form1", Nothing, ObjToInt(TextBox9), ObjToInt(TextBox13))