如何删除一组动态创建的控件(100分)

  • 主题发起人 主题发起人 jingping
  • 开始时间 开始时间
J

jingping

Unregistered / Unconfirmed
GUEST, unregistred user!
原代码如下:
type
private
CSpeedButton: TSpeedButton;
procedure cspeedButtonClick(Sender:TObject);

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
Bnum,Bxh,Bnumber:integer;
begin
Bnumber:=table2.RecordCount;
Bnum:=1;
with Table2 do First;
for Bxh:=1 to Bnumber do
begin
cSpeedButton:=TSpeedButton.Create(self);
cSpeedButton.Parent:=panel2;
cSpeedButton.Caption:=Table2['aaa'];
cSpeedButton.name:='SpeedButton'+inttostr(BNum);
cSpeedButton.OnClick:=cspeedButtonClick;
Bnum:=Bnum+1;
table2.next;
end;
end;

 
for i:=0 to panel1.ComponentCount-1 do
if (panel1.Components is TSpeedButton) and (pos('SpeedButton',panel1.Components.name)>0) then
panel1.Components.Free;

 
for i:=0 to panel1.controlCount-1 do
if (panel1.controls[0] is TSpeedButton) then
panel1.controls[0].Free;

改为以上后,即可用。能告诉我为什么不能Component吗
 
原来这样,这一句
cSpeedButton:=TSpeedButton.Create(self);
改成 ~~~~
cSpeedButton:=TSpeedButton.Create(panel1);
的话两个方法的可以,Twincontrol继承自Tcomponent,wincontrol可视
 
我覺得僅僅用控件的類型和名字來釋放不是太好,我的做法是:
創建一個TObjectList的對象,每創建動態一個控件就把它加到TObjectList中,
結束時根據TObjectList來釋放控件對象,然後再把TObjectList釋放,比較好一點,
安全一點。
 
我同意Calvin
mycontrollist=tlist.create;
mycontrollist.add(control);

然后再free,这样安全
 
多人接受答案了。
 
后退
顶部