说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

我在Form1上动态创建了100多个TImage和200多个TLabel(不是控件数组,而是一个个创建的,设有唯一tag),怎样可以快速将他们全部删除,并

编辑:说三道四文库 发布时间:2018-05-23 07:06
HTML文档下载 WORD文档下载 PDF文档下载
我在Form1上动态创建了100多个TImage和200多个TLabel(不是控件数组,而是一个个创建的,设有唯一tag),怎样可以快速将他们全部删除,并释放其资源?
创建这些控件的代码如下:

  While not DM.ADOQuery1.Eof do
    begin
      img:=TImage.Create(Self);
      img.Picture.Assign(ImageRes.Picture);
      img.Transparent:=False;
      img.Parent:=BrowseForm;
      img.Cursor:=crHandPoint;
     ......................
for i:=Form1.ControlCount-1 downto 0 do begin
  if (Form1.Controls[i] is TLabel) or (Form1.Controls[i] is TImage) then 
    Form1.Controls[i].Free;
end;

感谢 tonylk(tony) 的回答,但是我试了一下,要大概2-3秒才能完全删除这几百个东西,有没有效率更高的办法?

还有:用downto而不是to是不是因为可以美观视觉效果?
已经很快了;
这种方法有个隐含的问题,也就是在循环变量中赋的是一个可变的值:
for i:=Form1.ControlCount-1 downto 0 do 
Form1.ControlCount-1 删一个控件,变一次,在这个例子里可能不会有问题,但在其他地方就有可能出错.最好改为repeat...until
还有一种方法是可以把这些控件都放到一个panel上,删除的时候,只要删除panel控件就可以了
如果要想更快的话,我有个方法,不过没有试,但应该比上面快.你创建一个TObjectList.
MyObjectList := TObjectList.Create;
这样你每创建一个你的控件,就把它加入到MyObjectList中.当需要Free时,只要把这个List放掉即可.如果为了界面好看.也许可以先把界面先隐含掉再做.
肯定比上面快吧.因为上面需要做运行时的类型判断.
to sunware():你说的问题不是问题
把Form1.ControlCount-1先赋给一个变量就可以了
proman() 的办法可取。
创建一个FPublicOwner(任何一种继承自TComponent的组件均可,如隐藏的Panel),
作为所有动态组件的Owner,
动态组件创建时将它们的owner设为FPublicOwner,
全部删除时直接删除FPublicOwner即可。
如:

img := TImage.Create(FPublicOwner);
lab := TLabel.Create(FPublicOwner);
...

FPublicOwner.Free;
晕,用DOWNTO 而不用TO,并不是因为美化效果(帮TONY回答你),你自己看看,DOWNTO 和 TO 有什么区别,最简单的,从10循环到100就用TO ,从100循环到10就要用DOWNTO,明白了吗?????
我同意 zzheaptech(风的往事) 的方法!
在生成这些控件的时候指定它的parent为一个Panel,删除的时候直接将Panel删除掉,就会很快的
关注……
proman() 的说法绝对正确,补充一点:创建控件时,1 create,2 将控件加入数组,并获得数组内的序号 ;3 将序号付给控件的tag值 这样的好处在于可以任意删除、添加、修改某一个控件。
楼上不错,学习
替楼主问个问题,如果删除了再想创建呢,如把panle删除了是不是也要创建一个Panel呢,如果我想把这些Label或image保存到库中呢。包括label的x,y
坐标,tag属性,属于何中类型,如果我用list保存这些控件,如何我删除的不是全部面是一个或几个,怎样从这个list中快速找到我删除的哪个或哪几个控
件呢,(前提是不允许用循环啊)@_@
呵呵,我有办法解决。


引用一个新窗口form2,在form2上创建,全部创建完后把form2载入到form1的某个panel里显示。要删除时,先将form2隐藏,再删除form2。

form2.parent := form1.panel1;
form2.show;
不闪烁,无需循环
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘