组件释放问题 我 有个Form 是创建在 Panel 上,现在我要释放掉,应该怎么释放啊。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如果 form := tform.create(self) 不需要手动释放 form := tform.create(nil); 在需要释放的地方释放 form.free; 我自己是这样释放的 for i := 0 to pnlreceptacle.ComponentCount - 1 do begin pnlreceptacle.Components[i].Free; end;好像不对 1.for i := pnlreceptacle.ComponentCount - 1 downto 0 do begin pnlreceptacle.Components[i].Free; end;2 组件创建时 要 XXX := TXXX.Create(pnlreceptacle);3 这种方式创建的组件一般不需要释放.4 非要释放建议做下强类型转化 释放自己的,不确定的话建立的时候使用xxxx.create(self)具体要看你如何造的,才能决定你如何释放 搞懂DELPHI的OWNER机制,就知道什么时候要手动FREE什么时候不用了其实CREATE(SELF)也可以手动FREE 3楼正解!我对楼主的问题理解Form是创建在Panel上的,Form嵌套在Panel里显示,Form.Parent:=Panel,但Owner却有多种可能1、Form.Owner:=nil2: Form.Owner:=Panel3: Form.Owner:=Form(最底层的Form窗体,用Create(Self)创建还有Form.Owner:=Application或Form.Owner:=OtherCompenent等N种可能,要看你创建Form时的Owner参数是什么组件、只有第二种情况可以正确释放,前提是用三楼的方法。对所有情况有用的方法是使用Controls属性while pnlreceptacle.ControlCount>0 dopnlreceptacle.Controls[0].free; 一般我们都使用Components属性,而不是Controls如果对Owner,Parent,Self很了解,还有Sender,想写什么代码都不难。我都这么处理这种嵌套窗体的问题,是用框架窗体TFrame类TFrmBase作为自定义要嵌套子窗体的基类。其Ower和Parent属性指向同一个控件。TFrmBase=Class(TFrame)....public constructor Create(AParent: TWinControl); overload;.... constructor TFrmBase.Create(AParent: TWinControl); begin Inherited Create(AParent); Parent:=AParent; .... end; 关于 DateTimePicker1.DateTime 一个label中文字加载问题 ParamStr()这个函数不懂,希望快点得到回复! 当网线断开时,如何知道局域网中服务器已离线? 有关messagebox显示在最上面的问题? 终于、找到了一个放分的理由! 如何实现一个wizard对话框? 如何用SCOCKET的线程模式进行文件,信息的自动传送 怎样创建一个MDIForm? delphi调用rest接口开发N多求助 如何不用科学记数法显示长的小数? 编码:UCS_2_INTERNAL<<====>>gbk 互转,急
form := tform.create(nil); 在需要释放的地方释放 form.free;
for i := 0 to pnlreceptacle.ComponentCount - 1 do
begin
pnlreceptacle.Components[i].Free;
end;
好像不对
begin
pnlreceptacle.Components[i].Free;
end;
2 组件创建时 要 XXX := TXXX.Create(pnlreceptacle);3 这种方式创建的组件一般不需要释放.
4 非要释放建议做下强类型转化
具体要看你如何造的,才能决定你如何释放
我对楼主的问题理解
Form是创建在Panel上的,Form嵌套在Panel里显示,Form.Parent:=Panel,但Owner却有多种可能
1、Form.Owner:=nil
2: Form.Owner:=Panel
3: Form.Owner:=Form(最底层的Form窗体,用Create(Self)创建
还有Form.Owner:=Application或Form.Owner:=OtherCompenent等N种可能,要看你创建Form时的Owner参数是什么组件、
只有第二种情况可以正确释放,前提是用三楼的方法。
对所有情况有用的方法是使用Controls属性
while pnlreceptacle.ControlCount>0 do
pnlreceptacle.Controls[0].free;
如果对Owner,Parent,Self很了解,还有Sender,想写什么代码都不难。
我都这么处理这种嵌套窗体的问题,是用框架窗体TFrame类
TFrmBase作为自定义要嵌套子窗体的基类。其Ower和Parent属性指向同一个控件。
TFrmBase=Class(TFrame)
....
public
constructor Create(AParent: TWinControl); overload;
....
constructor TFrmBase.Create(AParent: TWinControl);
begin
Inherited Create(AParent);
Parent:=AParent;
....
end;