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

问题描述 投票:0回答:5

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

我必须检查用户是否为表单中的三个编辑控件输入了值。 感谢大家的帮助

delphi delphi-7
5个回答
19
投票

条件语句的一般形式是:

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 项目的免费组件 TJvValidators、TJvValidationSummary 和 TJvErrorIndicator 提供了一个很好的验证机制。


11
投票

当然。你可以这样做:

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

等等等等

实际阅读一本有关 Delphi 的书可能会有所帮助,例如《Delphi 语言指南》,它随每个版本的 Delphi 一起提供(在帮助中,在参考资料部分),或者可以在网上找到

对于问题:一般来说,您可以使用

and
or
not
组合不同的条件。为了避免运算符优先级问题,您通常应该将每个条件放在括号中,就像我上面所做的那样。


8
投票

您必须使用

And
Or
运算符将条件组合在 if 语句中

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

6
投票

记住表达式是从左到右计算的,这一点非常重要。

在此示例中

if False and SomeFunction() then

SomeFunction 将不会被评估。 如果你把它们转过来

if SomeFunction() and False then

SomeFunction() 将被评估。


1
投票

当使用

if not
时:

if not ( (edit1.Text = '2') or (edit2.Text = '3') ) then ...
© www.soinside.com 2019 - 2024. All rights reserved.