标签颜色不随FindComponent更改

时间:2013-08-08 20:04:57

标签: 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;

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

2 个答案:

答案 0 :(得分:6)

TLabel(FindComponent('Label'+IntToStr(i)).Font.Color:=clYellow);

显然应该阅读

TLabel(FindComponent('Label'+IntToStr(i))).Font.Color:=clYellow;

答案 1 :(得分:4)

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

TLabel(FindComponent('Label'+IntToStr(i)).Font.Color:=clYellow);

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

TLabel(FindComponent('Label'+IntToStr(i))).Font.Color:=clYellow;

但是,您的代码风险很大。它假设它将找到标签(如果标签在将来被重命名或删除,则可能会失败)。在使用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;

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