運算符優先級是什麼?
您的主要問題在於您有一個operator precedence的問題。那是什麼 ?
這與完成計算時的問題完全相同,乘法先到,然後加上。那麼在VB中。NET,And
運營商來Or
之前,所以你必須寫在你的代碼是什麼評價如下:
If txt_customername.Text <> "" Or
txt_customername.Text <> "N/A" Or
txt_customercontact.Text <> "" Or
(txt_customercontact.Text <> "N/A" And txt_customeracc.Text = "") Or
txt_customeracc.Text = "N/A"
Then
error1 += vbNewLine & "Please enter a correct Customer Account Number"
End If
因爲這不是你真正想要的東西,讓我們構建了一起:
- 如果
customername
ORcustomercontact
被填滿
和
這將使我們:
if (
(txt_customername.Text <> "" Or txt_customername.Text <> "N/A") 'CustomerName is filled up
Or
(txt_customercontact.Text <> "" Or txt_customercontact.Text <> "N/A") 'Customer Contact is filled up
)
And
(txt_customeracc.Text = "" Or txt_customeracc.Text = "N/A") 'Customer account is empty
Then
'Do whatever
End If
變得更好,調用一個函數
這裏的另一個問題是可讀性,這段代碼可以有錯誤,因爲它很難閱讀,所以很難調試。
我們可以做的是建立一個將檢查一個文本框爲空的函數:
Private Function IsEmpty(Tb As Textbox) As Boolean
'Here we return true if tb.Text is empty or contains "N/A"
Return Tb.Text = "" Or Tb.Text = "N/A"
End Function
這樣就會使這個多一點可讀性:
if (Not IsEmpty(txt_customername) Or Not IsEmpty(txt_customercontact)) 'CustomerName or Customer Contact is filled up
And IsEmpty(txt_customeracc) 'Customer account is empty
Then
'Do whatever
End If
讓它更好( 2),比較字符串
正如zaggler在他的評論中所述,在這裏我們不使用字符串比較。如果用戶開始鍵入,然後決定將其放回N/A並將其寫入小寫字母(「n/a」)會怎麼樣?那麼,我們會犯一個錯誤,認爲他確實填滿了文本框,並且最終會在數據庫中搜索用戶「n/a」,這不是一個好主意......
因此,讓我們compare the String ,讓我們的功能甚至更好:
Private Function IsEmpty(Tb As Textbox) As Boolean
'Here we return true if tb.Text is empty or contains "N/A" (or "n/a")
Return Tb.Text = "" Or (String.Compare(Tb.Text, "N/A", True) = 0)
End Function
注
你可以在這裏看到的功能優勢。我寫了它,因爲我不想六次更改爲String.Compare()
...每當你有兩次相同的代碼,它應該是一個函數...
我這個苦苦掙扎,但似乎如果我從查詢中刪除「N/A」元素和修改表單,因此該盒裝載空白它完美,謝謝你們的幫助Wingedpanther – Boneyt
出的所有的答案只要我不能相信沒有人在做字符串比較。如果用戶輸入'n/a',將會通過該檢查。比較會在這裏工作,ToLower或ToUpper,只是一個想法... – Codexer
@Zaggler我編輯了我的回答下面你的評論 –