如何动态销毁panel上的组件

lcn8011 2009-09-23 02:42:21
请教,我在panel上动态创建了一组tspeedbutton按钮组件,现在需要动态释放,代码如下:
for i:=0 to Pnl3.Componentcount-1 do
begin
if pnl3.Components[i] is TSpeedButton then
begin
pnl3.Components[i].free;

end;
end;
执行后,组件确实是销毁了,但是老是报错:
...全文
179 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcn8011 2009-09-23
  • 打赏
  • 举报
回复
问题解决了,原来是count值变了,所以出了问题。谢谢各位提示!
火龙岛主 2009-09-23
  • 打赏
  • 举报
回复
while Pnl3.Componentcount >0 do
begin
if pnl3.Components[0] is TSpeedButton then
FreeAndNil(pnl3.Components[0])
//或者 RemoveComponent(pnl3.Components[0])
end;
lcn8011 2009-09-23
  • 打赏
  • 举报
回复
奇怪了,我测试了下,发现取出来的Pnl3.Componentcount 是0 怎么会呢?
dahai9825 2009-09-23
  • 打赏
  • 举报
回复
哎呀 看蒙了 - -||
风之谷 2009-09-23
  • 打赏
  • 举报
回复
楼上正解
dinoalex 2009-09-23
  • 打赏
  • 举报
回复
因为count变了

for i:=0 to Pnl3.Componentcount-1 do
begin
if pnl3.Components[i] is TSpeedButton then
begin
pnl3.Components[i].free;
i:=0; // <------------多加一句
end;
end;
Harryfin 2009-09-23
  • 打赏
  • 举报
回复

for i:=Pnl3.Componentcount-1 downto 0 do
begin
if pnl3.Components[i] is TSpeedButton then
RemoveComponent(pnl3.Components[i]);
end;
dahai9825 2009-09-23
  • 打赏
  • 举报
回复
销毁的时候出错?参考
try
for i:=0 to Pnl3.Componentcount-1 do
begin
if pnl3.Components[i] is TSpeedButton then
begin
pnl3.Components[i].free;
pnl3.Components[i]:=nil;
end;
end;
except
end;
de410 2009-09-23
  • 打赏
  • 举报
回复
报什么错误?

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧