我的表单中有很多标签,我必须将颜色更改为所有标签,所以我想使用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;作品(例如).我该怎么解决这个问题?
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)
您的代码甚至不应该编译,因为您的括号不合适:
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())情况下它不能这样做,因为它无法在编译时告诉您将访问哪些标签。)
| 归档时间: |
|
| 查看次数: |
4620 次 |
| 最近记录: |