Delphi 使用命令仅更改最后 object 的属性
Delphi with command only changing properties of last object
Delphi with 命令无法正常工作?
procedure TForm1.Button1Click(Sender: TObject);
begin
With Label1, Label2 do
begin
caption := 'Hello'
end;
end;
我试图在一个超级简单的程序中使用上面的这段代码,但按钮只更改了 Label2 的标题 属性,而不是 label1。当代码如下所示时:
procedure TForm1.Button1Click(Sender: TObject);
begin
With Label1 do
begin
caption := 'Hello'
end;
end;
它正确地更改了 Label1 的属性。我需要如何更改代码才能更改 objects?
的属性
直截了当:
Label1.Caption := 'Hello';
Label2.Caption := 'Hello';
只是一些建议:不要使用 with
!
在您的第一个代码中,Label2 的 with
捕获范围并隐藏 Caption 属性 标签 1。一般来说,如果你想要两个作业,你必须写两个作业。您可能会根据情况使用循环,但此示例最简单,如上所示。
如果你有最新的 Delphi 版本,你可以这样写:
var
lbl: TLabel;
begin
for lbl in TArray<TLabel>.Create(Label1, Label2) do
lbl.Caption := 'Hello';
end;
恕我直言,情况更糟 - 至少对于这种情况。
来自 Delphi 文档:
当with后出现多个对象或记录时,整个语句被视为一系列嵌套的with语句。因此
with obj1, obj2, ..., objn do statement
相当于
with obj1 do
with obj2 do
...
with objn do
// statement
在这种情况下,如果可能,statement 中的每个变量引用或方法名称都被解释为 objn 的成员;否则,如果可能,它被解释为 objn1 的成员;等等。同样的规则适用于解释 objs 本身,例如,如果 objn 是 obj1 和 obj2 的成员,它被解释为 obj2.objn.
如您所见,这只是 with 不起作用的一个地方。
Delphi with 命令无法正常工作?
procedure TForm1.Button1Click(Sender: TObject);
begin
With Label1, Label2 do
begin
caption := 'Hello'
end;
end;
我试图在一个超级简单的程序中使用上面的这段代码,但按钮只更改了 Label2 的标题 属性,而不是 label1。当代码如下所示时:
procedure TForm1.Button1Click(Sender: TObject);
begin
With Label1 do
begin
caption := 'Hello'
end;
end;
它正确地更改了 Label1 的属性。我需要如何更改代码才能更改 objects?
的属性直截了当:
Label1.Caption := 'Hello';
Label2.Caption := 'Hello';
只是一些建议:不要使用 with
!
在您的第一个代码中,Label2 的 with
捕获范围并隐藏 Caption 属性 标签 1。一般来说,如果你想要两个作业,你必须写两个作业。您可能会根据情况使用循环,但此示例最简单,如上所示。
如果你有最新的 Delphi 版本,你可以这样写:
var
lbl: TLabel;
begin
for lbl in TArray<TLabel>.Create(Label1, Label2) do
lbl.Caption := 'Hello';
end;
恕我直言,情况更糟 - 至少对于这种情况。
来自 Delphi 文档:
当with后出现多个对象或记录时,整个语句被视为一系列嵌套的with语句。因此
with obj1, obj2, ..., objn do statement
相当于
with obj1 do
with obj2 do
...
with objn do
// statement
在这种情况下,如果可能,statement 中的每个变量引用或方法名称都被解释为 objn 的成员;否则,如果可能,它被解释为 objn1 的成员;等等。同样的规则适用于解释 objs 本身,例如,如果 objn 是 obj1 和 obj2 的成员,它被解释为 obj2.objn.
如您所见,这只是 with 不起作用的一个地方。