收集集合中的文本框并验证

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...