下班这段代码:
myform:TForm1;
myform:=TForm1.Create();
myform.Show;
这样可以显示出一个实例化的Form1,我的问题是当这个myform关闭之后,myform在内存中
是否还存在?如果还存在,那上边的写法就有问题,应该怎么写比较好?
我的理解是不应该存在了,因为Delphi的垃圾回收应该能处理这个问题,不知道各位大哥
大姐有什么看法?
myform:TForm1;
myform:=TForm1.Create();
myform.Show;
这样可以显示出一个实例化的Form1,我的问题是当这个myform关闭之后,myform在内存中
是否还存在?如果还存在,那上边的写法就有问题,应该怎么写比较好?
我的理解是不应该存在了,因为Delphi的垃圾回收应该能处理这个问题,不知道各位大哥
大姐有什么看法?
解决方案 »
- 如何使用TListView 的OnDrawItem event?
- 写好的源代码如何打包?
- 属性问题
- 演示一下好吗
- 谁知道.PDG是什么格式
- 沉默的羔羊!祝大伙春节快乐!快来UP!
- 下面的过程如何用代码的方式实现??????
- 在局域网中如何连接internet中的数据库?
- 问,我用ADOQUERY从SQL SERVER 查询的数据如何保存到ACCESS数据库中
- 如何在单击DBGrid的某个单元格时,让这个单元格显示为一个下拉框或者单选框?
- 為什麼Printer.Canvas.TextOut(151,350,DBImage1)這樣的語句有錯,請高手指點,在線等,分不夠再加,謝謝!!
- 大家看看!急啊!!!
若其Aowner为空时必须手动释放,
否则其Aowner会在自身释放时将改组件释放
不明白你的意思,能说详细点吗?
myform:TForm1;
myform:=TForm1.Create(self); //这样创建时不需要手工释放,self在释放的时候会将myform释放的
myform.Show;myform:=TForm1.Create(nil); //这样创建时,需要手工释
还有一点不太明白,如果是myform:=TForm1.Create(self);这其中的self是指什么?self释放是什么意思?
如果Form變量是局部變量,比如:procedure TForm1.BitBtn1Click(Sender: TObject);
var
Form:TForm1;
begin
Form:=TForm1.Create(nil);
try
Form.ShowModal; //不能用Show;
finally
Form.Free;
end;
end;=========================================================
如果Form變量是全局變量,比如:
var
Form1: TForm1;implementation{$R *.dfm}
那麼你要這樣寫,
方法1:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not Assigned(Form1) then Form:=TForm1.Create(nil);
Form1.Show;
end;方法2:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if not Assigned(Form1) then Form1:=TForm1.Create(nil);
try
Form1.ShowModal; //不能用Show;
finally
FreeAndNil(Form1);
end;
end;
......
initialization
Form1:=nil;//先將指針指為nil;finilization
if Assigned(Form1) then FreeAndNil(Form1); //釋放內存===========================================================
關于Form.Create方法的簡要說明:
constructor TCustomForm.Create(AOwner: TComponent);AOwner為創建對象的宿主,如果創建對象時指定AOwner,在宿主釋放內存時也會調用自己的destroy方法, 比如
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form1:=TForm1.Create(Self);
Form1.ShowModal;
//這里不需要寫form1.free;
end;
應該改成其它窗體, 比如Form1:=TForm1.Create(frmMain);
self是指实例本身,
因此下面的写法没有问题。
procedure TForm1.Button1Click(Sender: TObject);
var
MyForm: TForm1;
begin
MyForm := TForm1.Create(self);
MyForm.Show;
end;