0

我需要检查两个文本框 textbox_price 和 textbox_quantity 是否包含数值或根本没有值,如果,给出具体的错误消息。textbox_item 只允许使用非数字字符。目前使用 OR 的以下串联并且它有效,但我想知道这是否有效且良好。如您所见,支票很长且难以阅读。帮助表示赞赏。

If textbox_item.Text = "" Or textbox_price.Text = "" Or textbox_quantity.Text = "" Or          IsNumeric(textbox_price.Text) = False Or IsNumeric(textbox_quantity.Text) = False Or IsNumeric(textbox_item.Text) = True Then
        MsgBox("Please fill out every textbox with valid data", MsgBoxStyle.Information, "Invalid entry")
        textbox_price.Text = ""
        textbox_item.Text = ""
        textbox_quantity.Text = ""
        Exit Sub
    End If
4

3 回答 3

2

仅查看If...Then语句的逻辑(而不是您希望执行的代码),我会将其更改为:

If textbox_item.Text = "" OrElse textbox_price.Text = "" OrElse textbox_quantity.Text = "" OrElse _
    IsNumeric(textbox_price.Text) = False OrElse IsNumeric(textbox_quantity.Text) = False OrElse IsNumeric(textbox_item.Text) = True Then
    'Code to execute goes here
End If

基本上,在每种情况下都将其更改Or为。OrElse这样,只要满足其中一个条件,就不会检查其他条件。

OrElse这是一篇用 VB .NET解释的简短文章:

MSDN - OrElse 运算符

于 2012-10-01T17:01:54.693 回答
2

我希望看到一个长的 If..Then..ElseIf 链,因此错误消息可以针对问题。

If textbox_Item.Text = "" Then
    msgbox(errmsg1)
Elseif Not IsNumberic(textbox_Item.Text) Then
    msgbox(errmsg2)
Elseif ....
于 2012-10-01T17:04:45.227 回答
0

您可能想检查 IsNumeric 的实现在幕后做了什么。我也质疑你在 If 块之后在做什么。如果您打算在检查后使用该值,最好只使用 Decimal.TryParse (或您想要使用的任何数字 tryparse )并在 else 子句中发送验证提示:

Dim price As Decimal
Dim quantity As Integer
Dim item as As Double

If Decimal.TryParse(textbox_price.text, price) 
   AndAlso Integer.TryParse(textbox_quantity.Text, quantity)
   AndAlso Double.TryParse(textbox_item.Text, item) Then
   '' Do something with the values
Else
   '' Send validation prompt
End If

此选项的优点是您不会两次解析该值(IsNumeric 和 TryParse)。我记得, IsNumeric 尝试解析,但只是将结果丢弃。如果您想要结果,请使用 TryParse。TryParse 还处理空字符串和空字符串,因此您自己也不需要明确地进行这些测试。

于 2012-10-01T17:58:39.720 回答