我需要检查两个文本框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
答案 0 :(得分: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
。这样,只要满足其中一个条件,就不会检查其他条件。
这是一篇简短的文章,解释了VB .NET中的OrElse
:
答案 1 :(得分:2)
我希望看到一个很长的If..Then..ElseIf链,因此错误消息可以特定于问题。
If textbox_Item.Text = "" Then
msgbox(errmsg1)
Elseif Not IsNumberic(textbox_Item.Text) Then
msgbox(errmsg2)
Elseif ....
答案 2 :(得分: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还处理空字符串和空字符串,因此您也不需要自己明确地进行这些测试。