在Delphi中使用对象名称的变量

时间:2013-09-15 13:31:24

标签: delphi loops for-loop

我正在尝试使用常规方式更改许多labels的标题:

form1.label1.caption := '1';
form1.label2.caption := '2';
form1.label3.caption := '3';
form1.label4.caption := '4';
form1.label5.caption := '5';
form1.label6.caption := '6';
form1.label7.caption := '7';
form1.label8.caption := '8';
...

如何使用For并将i指定为Label[i]等标签名称?像这样:

for i := 1 to 50 do
   begin
     form1.label[i].caption := Inttostr(i);
   end;

更改太多对象参数的最佳方法是什么(在本例中为caption)?

3 个答案:

答案 0 :(得分:12)

如果您确定有50个标签label1,label2 .. label50
解决方案可能是这样的:

var lbl: TLabel;
for i:=1 to 50 do
begin
    lbl := (FindComponent('Label'+IntToStr(i)) as TLabel;
    lbl.Caption := IntToStr(i);
end;

答案 1 :(得分:9)

动态创建控件。如果需要保留对它们的引用,请在数组中保留这些引用。例如,这是一般模式。

var
  FLabels: array of TLabel;
....
SetLength(FLabels, Count);
for i := 0 to Count-1 do
begin
  FLabels[i] := TLabel.Create(Self);
  FLabels[i].Parent := Self;
  FLabels[i].Caption := IntToStr(i+1);
  FLabels[i].Left := 8;
  FLabels[i].Top := 8 + i*20;
end;

答案 2 :(得分:3)

如果您想更改表单上的所有标签,可以使用以下内容:

for i := 0 to Form1.ComponentCount do
  if Form1.Components[i] is TLabel then
    TLabel(Form1.Components[i]).Caption := IntToStr(i + 1);

如果标签位于Panel或其他容器上,您可以通过将Form1替换为“Form1.Panel1”来限制此项。你也可以用eg。组件的标签属性,可以轻松选择要更改的标签。