使用多个检查验证多个文本框

时间:2015-01-21 12:43:55

标签: vb.net validation textbox

我在一个组框中有多个文本框,并且可以成功地遍历它们。但是,checkNumbers子节点无法识别空白/空条目以及非数字字符。如果满足所有条件,则correctValidation布尔值应返回true(无空格/空值,且必须是1-20之间的数字)。如何解决这个问题的任何想法将不胜感激。

Private Sub checkNumbers()

Try
            For Each txt As TextBox In Me.gbTechnical.Controls.OfType(Of TextBox)()
                If txt.Text <> "" And IsNumeric(txt.Text) And (Integer.Parse(txt.Text) >= 1 And Integer.Parse(txt.Text) <= 20) Then
                    correctValidation = True
                Else
                    correctValidation = False
                    MsgBox("Please ensure all numbers are between 1 and 20")
                    Exit Sub
                End If
            Next

Catch ex As Exception
            MessageBox.Show("General: Please ensure all numbers are between 1 and 20")
        End Try

    End Sub

2 个答案:

答案 0 :(得分:1)

我会使用Integer.TryParse然后使用>= 1 AndAlso <= 20。您可以使用此LINQ查询:

Dim number As Int32
Dim invalidTextBoxes = 
    From txt In gbTechnical.Controls.OfType(Of TextBox)()
    Where Not Integer.TryParse(txt.Text, number) OrElse number < 1 OrElse number > 20
Dim correctValidation = Not invalidTextBoxes.Any()

请注意,您应该使用AndAlso代替AndOrElse而不是Or,因为这些运算符是短路布尔运算符。这可以更有效 - 更重要的是 - 可以防止错误。考虑一下:

Dim text = ""
If txt IsNot Nothing And txt.Text.Length <> 0 Then text = txt.Text

如果txt没有任何内容,则会失败,因为第二个条件已经过评估,即使第一个条件已经评估为false,导致NullReferenceException位于txt.Text

答案 1 :(得分:0)

如果您只想要一个数值,为什么不尝试使用NumericUpDown。您还可以设置最小值和最大值属性,或使用

NumericUpDown1.Maximum = 20

所以,不需要做checkNumbers。

或者你有什么理由要使用文本框吗?