VB.NET:在“If”语句中使用“Or”和“等于或大于”

时间:2014-12-02 21:41:27

标签: vb.net if-statement

我无法得到我如果声明工作正常。

我希望我的If语句检查我的两个文本框:名称和价格,以便它们不为空,并检查价格文本框,以便输入价格/数字等于或大于1.00。

现在,即使我输入的数字/价格高于1.00,该程序也会发出警告,这个数字只有在小于1.00的时候才应该这样做。

我正在使用:Option Explicit On,Option Strict On。

 Private Sub Btn_ResrvCancl_Click(sender As Object, e As EventArgs) Handles Btn_ResrvCancl.Click, listBox_ResDisplay.DoubleClick
        If listBox_ResDisplay.SelectedIndex >= 0 Then
            If radioBtn_Reserve.Checked Then
                If txt_Name.Text Is "" Or txt_Price.Text Is "" Or CDbl(txt_Price.Text) > 1.0 Then

                    MessageBox.Show("Please enter both your name and price (price must be 1.00 or higher)")

                Else

                    Dim BookingSuccess As Boolean = seatmgrResrv.NewReservation(txt_Name.Text, CDbl(txt_Price.Text), CInt(listBox_ResDisplay.SelectedItem.ToString.Substring(0, 15).Trim))
                    If BookingSuccess = False Then
                        MessageBox.Show("Already booked!")
                    End If
                    End If
                Else
                    Dim CancelSuccess As Boolean = seatmgrResrv.CancelReservation(CInt(listBox_ResDisplay.SelectedItem.ToString.Substring(0, 15).Trim))
                    If CancelSuccess = False Then
                        MessageBox.Show("Already vacant!")
                    End If
                End If

                UppsateList()
            Else
                MessageBox.Show("Please choose a seat")
            End If
    End Sub

根据我的理解,这必须是不正确的行,但我无法找到解决方案:

If txt_Name.Text Is "" Or txt_Price.Text Is "" Or CDbl(txt_Price.Text) > 1.0 

提前致谢!

2 个答案:

答案 0 :(得分:0)

这部分:

CDbl(txt_Price.Text) >= 1.0 Then
当价格大于或等于 1.0时,

会显示验证消息。你真的要检查价值是否严格低于1.0:

CDbl(txt_Price.Text) < 1.0

答案 1 :(得分:0)

Is运算符用于引用相等,即两个引用是否引用同一个对象,而您希望值相等,并使用=运算符。编译器可能会进行优化,以使其中任何一个都可以工作,但这并不是不能正确执行的理由。

此外,您无法真正使用CDbl,因为如果TextBox为空或包含其他非数字值,它将引发异常。如果您使用OrElse而不是Or,则会处理空案例,而不是其他任何案例。

最后,您希望通知用户该金额是否少于1,而不是大于。

总而言之,这就是您的代码应该是这样的:

Dim price As Decimal

If txt_Name.Text = String.Empty OrElse
   Not Decimal.TryParse(txt_Price.Text, price) OrElse
   price < Decimal.One Then