在窗体内,动态创建了一组button按钮
手动拖入一个button1
单击button1后,如何清除刚才动态创建的button?
我的代码如下:
if self <> nil then
begin
for i := 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is tbutton then (self.Components[i] as Tbutton).CleanupInstance ;//这里应该怎么写? end;
end;
请各位大虾指教!
手动拖入一个button1
单击button1后,如何清除刚才动态创建的button?
我的代码如下:
if self <> nil then
begin
for i := 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is tbutton then (self.Components[i] as Tbutton).CleanupInstance ;//这里应该怎么写? end;
end;
请各位大虾指教!
加上.free会报错
为什么?
这只是释放,但那些创建的button还在窗体内
怎样才能清空窗体内的所有button,使窗体内的button都消失?
我找不到更好的解决方法
请大虾指教!
begin
for i := 0 to self.ComponentCount - 1 do
begin
if self.Components[i] is tbutton then (self.Components[i] asTbutton).Free; end;
end;
执行后,会报错“list index out of bounds (54)”
点“确定”,index为奇数的button被清除,但偶数的还在
为什么会这样呢?
先
(self.Components[i] as Tbutton).Parent:=nil;
再
(self.Components[i] as Tbutton).Free;
begin
for i := self.ComponentCount - 1 downto 0 do
begin
if self.Components[i] is tbutton then (self.Components[i] asTbutton).Free;
end;
end; 这样试试
还会报同样的错,程序里并没有inc(i);之类的语句
而且每次报错,点了”确定“之后,都是index为奇数的button消失
不明白为什么会这样再请各位大虾指教!!
if self <> nil then
begin
for i := self.ComponentCount - 1 downto 0 do
begin
if self.Components[i] is tbutton then (self.Components[i] as Tbutton).Free;
end;
end;
i: Integer;
begin
if Self <> nil then
for i := ControlCount - 1 downto 0 do
if Controls[i] is TButton then
Controls[i].Free;
end;其它的什么Parent什么Owner可以不管,Delphi的TControl,TComponent里早就处理好了,不信可以看看Delphi的代码
为什么是for i := self.ComponentCount - 1 downto 0 do
而不是for i :=0 to self.ComponentCount - 1 do二者有什么区别吗?