7

我们可以在一个 if 语句中组合两个或多个条件吗?我知道在 C# 中,我们可以在 IF 语句中组合两个或多个条件。我们可以在德尔福做吗?

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

4

5 回答 5

18

条件语句的一般形式是:

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 ... 

以上是错误的,因为德尔福试图评估

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提供了一个很好的验证机制。

于 2012-06-27T05:22:59.373 回答
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

等等等等

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

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

于 2012-06-26T22:50:58.717 回答
7

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

 if (Edit1.Text<>'') and (Edit2.Text<>'') and (Edit3.Text<>'') then
于 2012-06-26T22:51:30.420 回答
5

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

在这个例子中

if False and SomeFunction() then

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

if SomeFunction() and False then

SomeFunction() 将被评估。

于 2012-06-27T09:12:53.747 回答
0

但是,如果使用“如果不是”,则:

如果不是( (edit1.Text = '2') 或 (edit2.Text = '3') )那么......

于 2016-11-21T09:31:37.437 回答