在一个if语句中组合两个或多个条件

use*_*630 7 delphi delphi-7

我们可以在一个if语句中组合两个或多个条件吗?我知道在C#中我们可以在IF语句中组合两个或多个条件.我们可以在Delphi中做到吗?

我必须检查用户是否为表单中的三个Edit控件输入了值.谢谢你的帮助

Hen*_*dra 18

条件陈述的一般形式是:

IF " 逻辑表达式 " THEN ... ELSE ...

"逻辑表达式"是任何布尔表达式.布尔表达式是一个表达式,可以计算为TRUE或FALSE.

可以使用比较运算符布尔运算符构造布尔表达式.

比较运算符:

=   equals
<>  not equals
>   greater than
>=  greater than or equals
<   less than
<=  less than or equals
Run Code Online (Sandbox Code Playgroud)

设置比较运算符:

=   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
Run Code Online (Sandbox Code Playgroud)

布尔运算符:

AND    logical and
OR     logical or
NOT    logical not
XOR    logical exclusive disjucntion
Run Code Online (Sandbox Code Playgroud)

例子:

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)
Run Code Online (Sandbox Code Playgroud)

C,D和E可以替换为任何逻辑表达式,例如:

IF (edit1.text = '') OR ( ISEMPTY( edit2.text ) ) THEN ...
IF NOT checkbox1.checked THEN ...
Run Code Online (Sandbox Code Playgroud)

请注意,逻辑表达式可以通过使用布尔运算符从更简单的逻辑表达式构造,例如:

IF ( A = 10 ) AND ( A >= B ) THEN ...
IF NOT ( ( A = 10 ) AND ( A >= B ) ) THEN ...
Run Code Online (Sandbox Code Playgroud)

编写逻辑表达式时常见的错误是没有注意运算符优先级(首先评估哪个运算符).布尔运算符的优先级高于比较运算符,例如:

IF A = 10 OR A >= B THEN ... 
Run Code Online (Sandbox Code Playgroud)

以上是错误的,因为Delphi试图评估

10 OR A 首先,而不是

A = 10.如果A本身不是逻辑表达式,则会发生错误.

解决方案是使用括号,所以上面的IF ...那么......应该写成:

IF (A = 10) OR (A >= B) THEN ...

为了检查3个编辑控件,条件语句变为:

IF ( Edit1.text <> '' ) AND ( Edit2.text <> '' ) AND ( Edit3.text <> '' ) THEN ...

注意:略有偏离主题,但相关.来自Jedi JVCL项目的免费组件TJvValidators,TJvValidationSummary和TJvErrorIndicator 提供了一个很好的验证机制.

  • +1的解释,但请不要使用所有大写字母的关键字.那是20世纪50年代. (8认同)

Rud*_*uis 10

当然.你可以这样做:

if (A > 7) and (B < 13) or (C in [2, 4, 7]) then
Run Code Online (Sandbox Code Playgroud)

或者对于编辑控件:

if (Edit1.Text <> '') and (Edit2.Text <> '') and (Edit3.Text <> '') then
Run Code Online (Sandbox Code Playgroud)

或者,如果这是你想要的:

if (Edit1.Text = '') or (Edit2.Text = '') or (Edit3.Text = '') then
Run Code Online (Sandbox Code Playgroud)

etc.etc.

实际阅读一本关于Delphi的书可能是有益的,例如Delphi语言指南,它随每个版本的Delphi一起提供(在帮助中,在参考文献部分中),或者可以在网上找到.

对于这样的问题:在一般情况下,你可以结合使用不同的条件and,ornot.为避免运算符优先级问题,通常应将每个条件放在括号中,如上所述.

  • 我个人总是在涉及逻辑操作时使用().它比试图在多种语言之间保持规则更安全.无论如何,编译器将生成相同的代码,在不需要它们时使用它们没有任何害处. (5认同)

RRU*_*RUZ 7

您必须使用AndOr运算符组合if语句中的条件

 if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then
Run Code Online (Sandbox Code Playgroud)


Pie*_*r B 5

记住表达式从左到右进行评估非常重要.

在这个例子中

if False and SomeFunction() then
Run Code Online (Sandbox Code Playgroud)

SomeFunction不会被评估.如果你转过身来

if SomeFunction() and False then
Run Code Online (Sandbox Code Playgroud)

将评估SomeFunction().