如何卸载自己动态加载的控件????????????????(20分)

  • 主题发起人 主题发起人 HHBBSS
  • 开始时间 开始时间
H

HHBBSS

Unregistered / Unconfirmed
GUEST, unregistred user!
我用
var b:tbutton;
i:integer;
begin
for i :=1 to 4 do
begin
b:=tbutton.Create(self);
b.Name :='ok'+inttostr(i);
b.Top :=100+i*10;
b.left:=100;
b.Width :=100;
b.Height :=30;
b.Parent :=form1;
end;
动态创建了几个按钮,
但我不知道如何动态卸掉他们,我用了很多办法,
其中
var
j:integer;
begin
for j:=1 to form1.ControlCount do
begin
if form1.Controls[j].ClassName='Tbutton'then
form1.Controls[j].Destroy
end;
end;
可老是报错,说list index out of bounds(8),不明白,我的窗体上加上按钮一共才6个
控件对象,那里来的8,help!!!!!!!!!!!!!!!!!!!
 
var
j:integer;
begin
for j:=1 to form1.ControlCount do
begin
if Findcomponent('ok'+inttostr(j)) is TButton then begin
TButton(Findcomponent('ok'+inttostr(j))).destroy;
end;
end;
end;
 
刁么 的办法是可行的,不过释放的时候不要直接调用 Destroy,用 Free 更好
 
用for i=1 to Form1.ControlCount ... 的方法释放根本行不通的。
当你释放了一个后,它的总数变了,到后来就下标越界了。
正确方法是
for i:=form1.ComponentCount-1 down to 0 do
if Form1.Components is TButton then
if Pos('ok',(Form1.Components as TButton).Name)>0 then //注意
Form1.Components.Free;

在//注意那一行,其实最好的办法是生成控件时,不要用Name属性,设置Tag=12345
那么这句就可以改为
if Form1.Components.Tag=12345 then //这样就可以知道哪些TButton是原来有的
哪些是你后来动态生成的了。
 
后退
顶部