0

我目前有 3 个文本框。每个文本框必须包含一个数字。如果三个文本框中的任何一个不包含数值,则显示错误消息。对于不显示数字的文本框(IsNumeric 返回 false),我想更改其默认值。我该怎么做呢?

If Not (IsNumeric(txtpadult.Text)) Or Not (IsNumeric(txtpjunior.Text)) Or Not (IsNumeric(txtpconc.Text)) Then
    MsgBox("ERROR: INVALID NUMERIC !", vbCritical, "System Message")
End if

提前致谢。

4

1 回答 1

4

首先,我建议尽可能使用新的 .NET 方法,而不是使用旧的 VB6 风格的方法。所以,MsgBox我会推荐使用MessageBox.Show,而不是,而不是IsNumeric,我会使用Integer.TryParse,等等。

因此,例如,您可以像这样重新编写代码:

Dim invalid As TextBox = Nothing
If Not Integer.TryParse(txtpadult.Text, 0) Then
    invalid = txtpadult
ElseIf Not Integer.TryParse(txtpjunior.Text, 0) Then
    invalid = txtpjunior
ElseIf Not Integer.TryParse(txtpconc.Text, 0) Then
    invalid = txtpconc
End If
If invalid IsNot Nothing Then
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
    invalid.Text = "0"  ' Set to default value
End If

正如你所看到的,当它测试每个文本框时,如果它发现一个无效的,它会在invalid变量中保留对它的引用。然后它可以检查是否找到了一个并设置它的值。或者,您可以创建一个需要检查的文本框列表,然后遍历它们,如下所示:

Dim textBoxes() As TextBox = {txtpadult, txtpadult, txtpconc}
Dim invalid As TextBox = Nothing
For Each i As TextBox In textBoxes
    If Not Integer.TryParse(i.Text, 0) Then
        invalid = i
        Exit For
    End If
Next
If invalid IsNot Nothing Then
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
    invalid.Text = "0"  ' Set to default value
End If

或者,如果您想变得聪明一点,您可以使用 LINQ 扩展方法用更少的代码行来完成:

Dim textBoxes() As TextBox = {txtpadult, txtpadult, txtpconc}
Dim invalid As TextBox = textBoxes.FirstOrDefault(Function(x) Not Integer.TryParse(x.Text, 0))
If invalid IsNot Nothing Then
    MessageBox.Show("ERROR: INVALID NUMERIC !", "System Message", MessageBoxButtons.OK, MessageBoxIcon.Error)
    invalid.Text = "0"  ' Set to default value
End If
于 2013-10-02T14:22:11.830 回答