我的表单中有很多标签,我必须将颜色更改为所有标签,所以我想使用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;
有效(例如)。我怎么能解决这个问题?
答案 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())
情况下这样做,因为它无法在编译时告诉你您将要访问的标签。)