收集集合中的文本框并验证
Collect textboxes in a collection and validate
我正在尝试收集一些文本框并根据输入的内容进行测试。我知道这已经回答了好几次,但大多数情况下想要收集面板或表单中的所有控件,我想选择每个文本框。
我正在尝试这个,基于另一个堆栈溢出答案,但它对我不起作用。空引用异常,大概我没有用 new 关键字实例化我的对象,但我没有实例化....
总之为什么这不起作用?
Dim boxes As New List(Of TextBox)() From {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TestTextBox()
End Sub
Private Sub TestTextBox()
For Each tb As TextBox In boxes
If String.IsNullOrEmpty(tb.Text) Then
MessageBox.Show("Text box is empty")
ElseIf tb.Text.Length > 10 Then
MessageBox.Show("Characters limited to 10")
End If
Next
End Sub
您在循环中得到 null
列表对象,因为您创建了一个 class 集合并初始化它以添加尚未创建或初始化的控件。 boxes
是在窗体的构造函数调用 InitializeComponent();
以创建和初始化托管控件(包括相关文本框)之前创建的。所以你需要等待创建控件才能访问它们。
声明一个 List<TextBox>
:
Public Class YourForm
Private ReadOnly boxes As List(Of TextBox)
然后在构造函数中,实例化并传递元素:
Sub New()
InitializeComponent()
boxes = New List(Of TextBox) From {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
End Sub
End Class
旁注,可以将文本框的MaxLength
属性设置为10
,省略这个ElseIf tb.Text.Length > 10 Then...
我正在尝试收集一些文本框并根据输入的内容进行测试。我知道这已经回答了好几次,但大多数情况下想要收集面板或表单中的所有控件,我想选择每个文本框。
我正在尝试这个,基于另一个堆栈溢出答案
Dim boxes As New List(Of TextBox)() From {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TestTextBox()
End Sub
Private Sub TestTextBox()
For Each tb As TextBox In boxes
If String.IsNullOrEmpty(tb.Text) Then
MessageBox.Show("Text box is empty")
ElseIf tb.Text.Length > 10 Then
MessageBox.Show("Characters limited to 10")
End If
Next
End Sub
您在循环中得到 null
列表对象,因为您创建了一个 class 集合并初始化它以添加尚未创建或初始化的控件。 boxes
是在窗体的构造函数调用 InitializeComponent();
以创建和初始化托管控件(包括相关文本框)之前创建的。所以你需要等待创建控件才能访问它们。
声明一个 List<TextBox>
:
Public Class YourForm
Private ReadOnly boxes As List(Of TextBox)
然后在构造函数中,实例化并传递元素:
Sub New()
InitializeComponent()
boxes = New List(Of TextBox) From {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
End Sub
End Class
旁注,可以将文本框的MaxLength
属性设置为10
,省略这个ElseIf tb.Text.Length > 10 Then...