2014-12-02 65 views
0

我無法讓我If語句正常工作。VB.NET:在「If」語句中使用「或」與「等於或大於」

我想要我的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 

提前感謝!

回答

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 
+0

謝謝@jmcilhinney,我真的很感謝你的幫助! – Televinken 2014-12-02 22:02:08

0

這一部分:

CDbl(txt_Price.Text) >= 1.0 Then 

會導致您的驗證消息顯示當時的價格是大於或等於1.0。真的,你應該檢查是否值嚴格小於1.0:

CDbl(txt_Price.Text) < 1.0 
+0

你說得對@布賴恩,謝謝!我現在改變了它,但不幸的是,它不能解決我的問題。我仍然可以使用0或更少。 – Televinken 2014-12-02 21:54:03