我們可以在一個if語句中結合兩個或更多個條件嗎? 我知道在C#中我們可以在IF語句中結合兩個或更多的條件。我們可以在Delphi中做到嗎?將兩個或更多條件結合在一個if語句中
我必須檢查用戶是否爲窗體中的三個Edit控件輸入了一個值。 感謝您的全力幫助
我們可以在一個if語句中結合兩個或更多個條件嗎? 我知道在C#中我們可以在IF語句中結合兩個或更多的條件。我們可以在Delphi中做到嗎?將兩個或更多條件結合在一個if語句中
我必須檢查用戶是否爲窗體中的三個Edit控件輸入了一個值。 感謝您的全力幫助
當然。你可以這樣做:
if (A > 7) and (B < 13) or (C in [2, 4, 7]) then
或爲編輯控件:
if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') then
或者,如果這是你想要的東西:
if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then
etc.etc。
實際閱讀一本關於Delphi的書可能會有所幫助,例如德爾福語言指南,它隨Delphi的每個版本一起提供(在幫助中,參考文獻部分)或can be found online。
對於這個問題:一般來說,您可以結合使用and
,or
和not
的不同條件。爲避免操作符優先級出現問題,通常應將每個條件放在括號內,如上所述。
它們可以進入與括號一個非常複雜的聲明過,例如,'如果((A> 7)或((B = 'ABC'),而不是(C = '高清'))或(d <> 8) )和(R> 8)然後...'(其'<>說到'就像'!='在如C#其他語言) –
感謝您的鏈接 – user1469630
我個人始終使用()秒時邏輯操作被參與其中。比試圖在多種語言之間保持規則更安全。無論如何,編譯器會生成相同的代碼,在不需要時使用它們沒有任何壞處。 –
必須使用And
和Or
運營商在if sentence
if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then
條件語句的一般形式是合併條件:
IF 「邏輯表達式」 THEN。 .. ELSE ...
「邏輯表達式」是任何布爾表達式。布爾表達式是一個表達式可以評估爲TRUE或FALSE。
布爾表達式可使用比較運算符和布爾運算符來構造。
比較運算符:
= equals
<> not equals
> greater than
>= greater than or equals
< less than
<= less than or equals
集比較運算符:
= equals
<= returns true, if set1 is a subset of set2
>= returns true, if set1 is a superset of set2
in returns true, if an element is in the set
布爾運算符:
AND logical and
OR logical or
NOT logical not
XOR logical exclusive disjucntion
實例:
IF A = 10 THEN ...
IF A >= B THEN ...
IF C or D THEN ... (Note: C and D have to be logical, i.e. TRUE or FALSE)
IF NOT E THEN ... (Note: E has to be logical, i.e. TRUE or FALSE)
C,d和E可以是具有任何邏輯表達式替換,例如:
IF (edit1.text = '') OR (ISEMPTY(edit2.text)) THEN ...
IF NOT checkbox1.checked THEN ...
注意,邏輯表達式可以由較簡單的邏輯表達式通過使用布爾運算符,對於實施例來構造:
IF (A = 10) AND (A >= B) THEN ...
IF NOT ((A = 10) AND (A >= B)) THEN ...
編寫邏輯表達式時常犯的錯誤是沒有注意到運算符優先級(哪個運算符首先被評估)。布爾運算符具有優先級高於比較運算符,例如:
IF A = 10 OR A >= B THEN ...
以上是錯誤的,因爲Delphi的嘗試計算
10 OR A
第一,代替
A = 10
。如果A本身不是一個邏輯表達式,則會發生錯誤。
的解決方案是通過使用括號,因此上述IF ... THEN ...應該寫成:
IF (A = 10) OR (A >= B) THEN ...
對於檢查3個編輯控件,條件語句變成:
IF (Edit1.text <> '') AND (Edit2.text <> '') AND (Edit3.text <> '') THEN ...
注:略有偏離主題,但相關。來自Jedi JVCL project的免費組件TJvValidators,TJvValidationSummary和TJvErrorIndicator提供了一個很好的驗證機制。
+1的解釋,但請不要使用關鍵字的全部大寫。那是五十年代。 –
我將'<>'添加到您的運營商列表中。 –
'in'應該有過,但我不知道如何把它總結一下,在不到3個字... –
請記住,表達式從左到右進行評估是非常重要的。
在這個例子中
if False and SomeFunction() then
SomeFunction不會進行評價。 如果你把他們周圍
if SomeFunction() and False then
SomeFunction()將進行評估。
這是一個重要的答案,所有其他答案都非常明顯。 –
這取決於[布爾短路評價](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html)'{$ B}'/'{$ BOOLEVAL}'默認情況下它被設置爲'OFF'。但是如果它被設置爲'ON',則在第一個例子中將評估'SomeFunction'。 – kobik
@ kobik你是對的。但是,如果開發者任何時候設置它,我會追捕他並質疑他的理智。 –
然而,如果使用 「如果不是」,則:
如果不是((edit1.Text = '2')或(edit2.Text = '3'))然後...
每一種編程語言,我知道的,這是200,有某種形式的布爾邏輯的,涉及操作AND,OR,和NOT。如果你還沒有看到這些,你真的需要讀一本書。事實上,如果你在C#中做了它,爲什麼不在delphi中嘗試呢?唯一不同的是,在Delphi中,括號並不總是需要使用IF語句。但是當進行多重相等比較時,例如,應該寫'if(a = b)或(c = d)'。 –
附加。你還需要考慮一些條件需要在if((a = x1)和(b = y1))或((a = x2)和(a = y2))這樣的括號中進行分組。 – XBasic3000