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

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

编辑:说三道四文库 发布时间:2017-05-23 05:29
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;
不闪烁,无需循环
深度学习新算法,完成字里行间的情绪识别 如何在开发项目里和难缠的程序员合作? 移动周报:七大无需编程的DIY开发工具 手把手教学,用jQuery Mobile创建Web App 别惊讶,Android绿色机器人标志灵感来自于卫生间标识 Google TV更名为Android TV 智能电视的路不好走 CTO如何避免决策失控(四)——通盘考虑 做到技术业务不分家 重塑世界!历届MDCC重磅嘉宾演讲大回顾 从贝佐斯的14句言论看商业成功之道 5大宠物可穿戴式设备 Google CIO Ben Fried谈内部工具文化 【开源专访】Fourinone创始人彭渊:打造多合一的分布式并行计算框架 API优先架构或者胖瘦服务器之争 Windows Phone 8迎来Update3更新:支持更大屏幕 更多磁贴 AMD院士站台 异构计算与OpenCL编程师资培训首站清华开讲 Twitter、Square开创者Jack Dorsey的奇趣人生 利用CSS、JavaScript及Ajax实现图片预加载的三大方法 经典电影里的数学 15亿美元!软银联合GungHo收购手游巨头Supercell Oracle“炮轰”开源:称其永远无法在军事领域取得一席之地 零客户端:下一代计算分布模型 苹果聘奢侈品公司巴宝莉CEO Angela Ahrendts为零售主管 看看你会几个?9大最火的移动开发技能 为了进一步拴住用户:传亚马逊与HTC合作开发智能手机 三年?又三年!今年MDCC2013大不相同! 杨远骋:聚美优品与百度云推送的故事 糗事百科王坚:百度云推送让我们省心 10个最热JavaScript开源框架的社区活跃度对比 2013福布斯中国富豪榜:李彦宏第三、马化腾第五、马云第八 Storm又获东风,Hortonworks计划将其整合到Hadoop企业版 IBM CEO:预测高新技术 五个我最喜欢的方式 .................寻找最佳方法::『关于关键字检索』(参与有分!) 有谁做过小波分析的分解及重构程序 口误(爆笑) 救命阿 急!在线等 如何补捉MSCOM控件的错误消息? 如何查看dll中的函数,不是引出函数 有没有初恋(第一次)的对象就成了自己的伴侣的? 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 iostream.h 和 iostream的区别 我新建了一个dialog,我想让他在程序一开始出现 为什么在win xp 下安装vc7.0后不能导入图片资源? 请问用C++ 如何打开数据库 请教高手有关C#的DLL的使用???? 我想找一个比较好的菜单系统,哪有呢? iis5.0中的调试能不能做到象在pws中一样轻松? 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 大家一定遇到过同样的问题!有好办法吗? 如何扩充linux的硬盘空间? 关于JBuilder7的注册码和key 一点小问题,请帮帮忙 请教:哪边有详细介绍使用VBSQL对DB库API编程的?? 急!!!我用push模式把dataset的值在运行时,动态赋给crystal report, 在有.net的开发环境中运行没有任何问题,可是在只有发布后,执行 在线等待,马上送分:怎样将Query查询的数据集全部删除,数据库SQL中的数据也删除 linux下的图形处理程序,哪里可找到? EJB菜鸟级问题,我有分可捐赠,那位要请在这里说 报错的原因(Invalid cursor state) infopower有没有for BCB5的呢??哪里可以下载?? 奇怪的现象! 关于接口 请大家提供方案 同志们我想问的是高程中考的是标准C还是C++ SQL查询结果问题 在Delphi中我如何得到,打印机任务个数? 刚上来散分了 安装softice后,机器不能启动了!!!!!! datawindow的edit有editchanged事件,即一改变内容就触发,我想将这个事件加在multilineedit控件里,自定义事件要选择哪个EventID? 在存储过程中如何使用表名变量? 一点小问题,请帮帮忙 菜鸟求助 用VC对WORD文档进行一些操作,高分求救 Suspicious pointer conversion 是什么警告啊? 有哪位高手知道微软提供的的简繁互转的组件是哪个,在线等待,高分送 紧急求助!!既可以选择还可以接受用户输入的下拉选框!!万分感谢!! 在jsp页面中如何实现显示一行文字消息后再更改该文字的内容?? 高分求Excel基本操作代码,如打开关闭文件、取单元格数据之类的 关于MSHFLexGrid与ADODC的几个问题 什么是内建数据库? 请问Delphi 6怎么样才能激活Invokable向导? 安装softice后,不能启动机器了!!!!!!!! 听听StringGrid 隐藏行的好建议,别讲RowHeight[i]=0阿 关于VB调用Excel打印报表的问题
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘