2012-06-26 239 views
6

我們可以在一個if語句中結合兩個或更多個條件嗎? 我知道在C#中我們可以在IF語句中結合兩個或更多的條件。我們可以在Delphi中做到嗎?將兩個或更多條件結合在一個if語句中

我必須檢查用戶是否爲窗體中的三個Edit控件輸入了一個值。 感謝您的全力幫助

+1

每一種編程語言,我知道的,這是200,有某種形式的布爾邏輯的,涉及操作AND,OR,和NOT。如果你還沒有看到這些,你真的需要讀一本書。事實上,如果你在C#中做了它,爲什麼不在delphi中嘗試呢?唯一不同的是,在Delphi中,括號並不總是需要使用IF語句。但是當進行多重相等比較時,例如,應該寫'if(a = b)或(c = d)'。 –

+0

附加。你還需要考慮一些條件需要在if((a = x1)和(b = y1))或((a = x2)和(a = y2))這樣的括號中進行分組。 – XBasic3000

回答

10

當然。你可以這樣做:

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,ornot的不同條件。爲避免操作符優先級出現問題,通常應將每個條件放在括號內,如上所述。

+0

它們可以進入與括號一個非常複雜的聲明過,例如,'如果((A> 7)或((B = 'ABC'),而不是(C = '高清'))或(d <> 8) )和(R> 8)然後...'(其'<>說到'就像'!='在如C#其他語言) –

+0

感謝您的鏈接 – user1469630

+5

我個人始終使用()秒時邏輯操作被參與其中。比試圖在多種語言之間保持規則更安全。無論如何,編譯器會生成相同的代碼,在不需要時使用它們沒有任何壞處。 –

7

必須使用AndOr運營商在if sentence

if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then 
16

條件語句的一般形式是合併條件:

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提供了一個很好的驗證機制。

+7

+1的解釋,但請不要使用關鍵字的全部大寫。那是五十年代。 –

+0

我將'<>'添加到您的運營商列表中。 –

+0

'in'應該有過,但我不知道如何把它總結一下,在不到3個字... –

5

請記住,表達式從左到右進行評估是非常重要的。

在這個例子中

if False and SomeFunction() then 

SomeFunction不會進行評價。 如果你把他們周圍

if SomeFunction() and False then 

SomeFunction()將進行評估。

+1

這是一個重要的答案,所有其他答案都非常明顯。 –

+1

這取決於[布爾短路評價](http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/devcommon/compdirsbooleanshortcircuitevaluation_xml.html)'{$ B}'/'{$ BOOLEVAL}'默認情況下它被設置爲'OFF'。但是如果它被設置爲'ON',則在第一個例子中將評估'SomeFunction'。 – kobik

+0

@ kobik你是對的。但是,如果開發者任何時候設置它,我會追捕他並質疑他的理智。 –

0

然而,如果使用 「如果不是」,則:

如果不是((edit1.Text = '2')或(edit2.Text = '3'))然後...