注册 登录
编程论坛 Delphi论坛

为何用变量代替label无效?

jzry 发布于 2005-11-26 10:39, 1403 次点击

想更新label1-label400的caption为空,循环程序如下:

var i:integer;
w1,w2,w3:string;
begin
for i:=1 to 400 do
begin
w1:='label';
w2:=inttostr(i);
w2:=w1+w2;
w3:='.caption';
w3:='';
end;
end;

结果label的caption仍为原值,如何循环清空?请指教!

9 回复
#2
zhangzujin2005-11-26 15:19
w1:='label'; //把label赋给w1
w2:=inttostr(i); // w2是i(字符)了
w2:=w1+w2; // 呵呵,w2是labeli了
w3:='.caption'; // w2是".caption"了
w3:='';// w3是空字符了

这样有什么用啊。
#3
zhangzujin2005-11-26 15:24

delphi中不知道怎么做,但VB中有控件的数组表示。
VC中也更好做。

#4
jzry2005-11-26 16:06

谢谢这位仁兄的回答!
下面是更正过的程序,可这样为什么也不行?delphi真的做不到吗?
var i:integer;
w1,w2,w3:string;
begin
for i:=1 to 400 do
begin
w1:='label';
w2:=inttostr(i);
w2:=w1+w2;
w3:='.caption';
w3:=w2+w3'';//w3为labeli.caption
w3:='';
end;
end;

#5
first1812005-11-27 16:42
参考这句啦。
var
i:integer;
begin
for i:=1 to 34 do
begin
tlabel(FindComponent('label'+inttostr(i))).Text :='';
#6
jzry2005-11-28 07:06

非常感谢5楼的朋友的回答,真的解决了!真的好高兴!实实在在兴奋了一阵子~~~

但有一个限制条件,下面程序有效:
var
i:integer;
begin
ADOTable1.TableName:='ybbb';
ADOTable1.Active:=true;

for i:=1 to 34 do
begin
tlabel(FindComponent('label'+inttostr(i))).Text :='';
end;

with adotable1 do
begin

//其它命令行

end;

end;


下面程序无效:

var
i:integer;
begin
ADOTable1.TableName:='ybbb';
ADOTable1.Active:=true;

with adotable1 do
begin

for i:=1 to 34 do
begin
tlabel(FindComponent('label'+inttostr(i))).Text :='';
end;

end;

end;


即 放在 with adotable1 do begin end; 语句中间无效!之外有效!烦请再解决!真心感谢!

#7
yang399212005-11-28 08:35
你可以看一下我上面所發的帖子,是清空所有編輯框的,我想應該大同小億
#8
ysp_19842006-01-05 05:42

再给你个提示:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
frmcomponent:Tcomponent;
begin
for i:=0 to form1.ComponentCount-1 do
begin
frmcomponent:=form1.Components[i];
if ( frmcomponent is Tlabel) then
(frmcomponent as Tlabel).Caption:='';

end;
end;

end.

#9
ysp_19842006-01-05 05:49
五楼的有个缺陷就是如果label的名字不是默认的,上述代码不成立。例如:如果把label1,label2,...label34。改为:lblone,lblseconed,....,上述代码就不成立了。。
就是这句话: 'label'+inttostr(i)
#10
ysp_19842006-01-05 05:50
五楼的有个缺陷就是如果label的名字不是默认的,上述代码不成立。例如:如果把label1,label2,...label34。改为:lblone,lblseconed,....,上述代码就不成立了。。
就是这句话: 'label'+inttostr(i)
1