使用多个检查验证多个文本框
Validating multiple textboxes with multiple checks
我在一个组框中有多个文本框,并且可以成功循环所有这些文本框。但是 checkNumbers 子程序无法识别 blank/null 条目以及非数字字符。如果满足所有条件,则 correctValidation 布尔值应该 return 为真(否 blanks/nulls,并且必须是 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
我会使用 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
而不是 And
和 OrElse
而不是 Or
,因为这些运算符是短路布尔运算符。这可以更有效,并且 - 更重要的是 - 可以防止错误。考虑一下:
Dim text = ""
If txt IsNot Nothing And txt.Text.Length <> 0 Then text = txt.Text
如果 txt
为空,则此操作失败,因为即使第一个条件已被评估为 false
,也会评估第二个条件,这会在 txt.Text
处导致 NullReferenceException
。
如果您只想要一个数字值,为什么不尝试使用 NumericUpDown。您还可以在 属性 中设置最小值和最大值或使用
NumericUpDown1.Maximum = 20
因此,不需要执行 checkNumbers。
或者你有什么理由必须使用文本框??
我在一个组框中有多个文本框,并且可以成功循环所有这些文本框。但是 checkNumbers 子程序无法识别 blank/null 条目以及非数字字符。如果满足所有条件,则 correctValidation 布尔值应该 return 为真(否 blanks/nulls,并且必须是 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
我会使用 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
而不是 And
和 OrElse
而不是 Or
,因为这些运算符是短路布尔运算符。这可以更有效,并且 - 更重要的是 - 可以防止错误。考虑一下:
Dim text = ""
If txt IsNot Nothing And txt.Text.Length <> 0 Then text = txt.Text
如果 txt
为空,则此操作失败,因为即使第一个条件已被评估为 false
,也会评估第二个条件,这会在 txt.Text
处导致 NullReferenceException
。
如果您只想要一个数字值,为什么不尝试使用 NumericUpDown。您还可以在 属性 中设置最小值和最大值或使用
NumericUpDown1.Maximum = 20
因此,不需要执行 checkNumbers。
或者你有什么理由必须使用文本框??