运算符优先级是什么?
您的主要问题在于您有一个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我编辑了我的回答下面你的评论 –