procedure TForm_MainForm.ToolButton6Click(Sender: TObject);
var TabSheet: TTabSheet;
WebBrowser: TWebBrowser;
begin
TabSheet:=TTabSheet.Create(Self);
TabSheet.Caption:='New';
TabSheet.PageControl:=PageControl1; WebBrowser:=TWebBrowser.Create(Self);
TabSheet.InsertControl(WebBrowser);
//WebBrowser.Parent:=TabSheet;
WebBrowser.Align:=alClient;
WebBrowser.Navigate('http://www.csdn.net');
end;上面的过程,运行时正常,我的程序在退出时,是否需要Free我动态建立的控件?
var TabSheet: TTabSheet;
WebBrowser: TWebBrowser;
begin
TabSheet:=TTabSheet.Create(Self);
TabSheet.Caption:='New';
TabSheet.PageControl:=PageControl1; WebBrowser:=TWebBrowser.Create(Self);
TabSheet.InsertControl(WebBrowser);
//WebBrowser.Parent:=TabSheet;
WebBrowser.Align:=alClient;
WebBrowser.Navigate('http://www.csdn.net');
end;上面的过程,运行时正常,我的程序在退出时,是否需要Free我动态建立的控件?
procedure TForm_MainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var i: Integer;
TabSheet: TTabSheet;
WebBrowser: TWebBrowser;
begin
for i:= 0 to PageControl1.PageCount -1 do
begin
TabSheet:=PageControl1.Pages[i];
WebBrowser:=TabSheet.Controls[0] as TWebBrowser; TabSheet.RemoveControl(TabSheet.Controls[0]);
TabSheet.PageControl:=nil; WebBrowser.Free;
TabSheet.Free;
end
end;
要养成每CREATE一个类,在用完后就FREE它
这样比较清晰些,而且效率会好一些!
你的意见还是可以接受的,但是,我动态建立的是窗口型控件,只有在用户关闭,或者程序退出时才需要释放.如果,我要建立一个类的临时的实列,我当然会采用用完就释放的方法.
to netatomy(Eyes On Me):
我怎样才能验证你的说法?
请同意 netatomy(Eyes On Me) 的高手给个验证的方法!
谢谢!
如果netatomy(Eyes On Me)正确我再开贴加100分!
procedure TForm_MainForm.FormClose(Sender: TObject;
var Action: TCloseAction);
var TabSheet: TTabSheet;
WebBrowser: TWebBrowser;
begin
While PageControl1.PageCount <> 0 do
begin
TabSheet:=PageControl1.Pages[0];
WebBrowser:=TabSheet.Controls[0] as TWebBrowser; TabSheet.RemoveControl(TabSheet.Controls[0]);
TabSheet.PageControl:=nil; WebBrowser.Free;
TabSheet.Free;
end
end;
建立两个窗口和一个共巷单元。
在共享单元中声明一个窗口类控件,我声明了一个TEdit;
然后让第一个窗口来创建第二个窗口,第二个窗口为模式窗口,
在第二个窗口的Create事件中创建TEdit,然后由第一个窗口释放
第二个窗口,不写释放TEdit代码,释放完第二个窗口后,在第一个窗口中
ShowMessage(Edit.text)
出现地址冲突,表明TEdit已经被第二个窗口释放,不用写释放语句。
楼主的名字太日本化了吧
结论是,退出时不需要释放,但是,没有Parent的类需要自己释放.
验证方法是:
首先建立一个PageControl1,然后建立TabSheet,在建立的TabSheet上加入一个控件Acontrol.
在PageControl1的onchange事件中加入:
Acontrol.parent:=PageControl1.activePage;
然后在加入一个按钮button1:
TabSheet:=TTabSheet.Create(Self);
TabSheet.Caption:='New';
TabSheet.PageControl:=PageControl1;
再加入一个按钮button1:
PageControl1.activePage.free;
程序运行时,你新建几页,在free掉当前页后,当你再进入新的页的时候你就会发现:Acontrol is nil