标签颜色不随FindComponent更改

Alb*_*ssi -1 delphi lazarus

我的表单中有很多标签,我必须将颜色更改为所有标签,所以我想使用for循环+ FindComponent方法.

procedure TForm1.RadioButton1Click(Sender: TObject);
var i:shortint;
begin
for i:=16 to 27 do
  begin
   TLabel(FindComponent('Label'+IntToStr(i)).Font.Color:=clYellow);
  end;
 Label85.Font.Color:=clYellow;
 Label104.Font.Color:=clYellow;
end;
Run Code Online (Sandbox Code Playgroud)

我正在使用拉撒路,我有这样的错误:identifier idents no member "Font".顺便说一句,你可以看到Label104.Font.Color:=clYellow;作品(例如).我该怎么解决这个问题?

And*_*and 6

TLabel(FindComponent('Label'+IntToStr(i)).Font.Color:=clYellow);
Run Code Online (Sandbox Code Playgroud)

显然应该阅读

TLabel(FindComponent('Label'+IntToStr(i))).Font.Color:=clYellow;
Run Code Online (Sandbox Code Playgroud)


Ken*_*ite 5

您的代码甚至不应该编译,因为您的括号不合适:

TLabel(FindComponent('Label'+IntToStr(i)).Font.Color:=clYellow);
Run Code Online (Sandbox Code Playgroud)

之后的右括号clYellow应该与其他两个之后IntToStr(i))和之前.Font

TLabel(FindComponent('Label'+IntToStr(i))).Font.Color:=clYellow;
Run Code Online (Sandbox Code Playgroud)

不过,您的代码风险很大。它假设它将找到标签(如果标签在未来被重命名或删除,这可能会失败)。在使用以下结果之前先检查会更安全FindComponent

procedure TForm1.RadioButton1Click(Sender: TObject);
var 
  i: Integer;
  TempComp: TComponent;
begin
  for i := 16 to 27 do
    begin
     TempComp := FindComponent('Label' + IntToStr(i));
     if TempComp <> nil then
       (TempComp as TLabel).Font.Color:=clYellow;
    end;
  Label85.Font.Color :=clYellow;
  Label104.Font.Color :=clYellow;
end;
Run Code Online (Sandbox Code Playgroud)

(最后两行是安全的,因为编译器会告诉您这些标签是否被重命名或删除;在这种TLabel(FindComponent())情况下它不能这样做,因为它无法在编译时告诉您将访问哪些标签。)