动态创建form常碰到一个问题就是必须在创建之前判断form是否已经存在,通常第一次创建的时候form肯定为nil,但是当使用完毕之后如果form.free后,form肯定不是nil,必须在form关闭之后在他的主调用form中动态freeandnil(form),或者form.free;form.nil;才能变成nil
我想知道有没有办法当form.free之后,form指针并不是nil的时候来判断form是否已经被free过了,是否能够正常创建一个新的对象。
这个问题困扰了很久了!
我想知道有没有办法当form.free之后,form指针并不是nil的时候来判断form是否已经被free过了,是否能够正常创建一个新的对象。
这个问题困扰了很久了!
解决方案 »
- 如何获取查询出来的值
- 打印图片
- 可是使用odac里面的ToraQuery组件调用存储过程,并返回游标吗?比如select语句的结果怎么返回给ToraQuery?
- 谁能用程序解决控制打印走纸,将会有想不到的收获!
- 怎樣控制excel單元格的格式?
- 郁闷~~~~没分也散~~~~~~
- 使用VB写的一个Activx Library Dll,却总是报错
- 急急急,非常急(菜鸟得问题)请各位帮忙指点(在线等待)
- 莫明的错误,请高手指点!!!!!!!!!
- 谁提供一下Delphi7的下载地址啊??
- 主窗口dbtreeview如何控制子窗口dbgrid
- 谁知道commreg.bpl控件在哪里可以找到,急!!!!有高分相送
if not assigned(form) then
form := tform.create(application);
form.show;
Application.createform(TForm1,Form1);
Form1.showmodal;
一个系统不是每个人都是用freeandnil,或者不是每一个form释放都能成为nil,所以必须判断这种情况
难道free之后没有将此对象真正释放吗?
可我操作Form时基本上都是动态创建的,而且都是CreateForm以后再free这个Form的,好象没出什么问题啊.
Form1:=TForm1.create(application)
else
Form1.show;
在formclose事件中
form1:=Nil;
Action:=caFree;
haipin(似水柔情) 的方法也行;条条大路通罗马!
1. FreeAndNil(Self);
2. Action:=caFree;
Form1:=Nil; //这里不能使用Self:=Nil;因为此时Self不等于Form1
3. Self.Free或者Self.Release;
Form1:=Nil; //同上后面那个问题,最好给个代码来判断!
在MainForm中:
procedure TMainForm.FormActivate(Sender: TObject);
var Enter: TEnter; ←TEnter是一个form类
begin
Enter := TEnter.Create(Self);
//Enter.ShowModal; ←为了调试程序方便,我把这句先屏蔽
end;procedure TMainForm.N5Click(Sender: TObject);
var Information1: TInformation1; //TInformation1也是一个form类
begin
Information1 := TInformation1.Create(Self);
Information1.ShowModal;
end;
在Information1中如果我把他的关闭键写成free,就出现第二个问题了,不知道到什么回事。
procedure TInformation1.CloseClick(Sender: TObject);
begin
Information1.Free;
end;
swordman119(★人无名剑也无名★) :
你的关闭窗体的方法不正确.你的
procedure TInformation1.CloseClick(Sender: TObject);
begin
Information1.Free;---改为Close;
end;
还是在Screen.Forms中查找比较好,虽然慢一点,但调用次数不多,无伤大雅!
用Close我知道的,但是为什么用了free之后就出现这问题了呢?
有一点我不是很明白,show方法和showmodal方法有什么区别呢?
if not Assigned(ChildForm) then
begin
ChildForm := TChildForm.Create(self);
ChildForm.ShowModal;
end;
调用,发现没成功啊。不知道free到底是怎么回事。
Form1:=TForm1.create(application)
else
form.show;这样就可以了
begin
try
if not Assigned(form2) then
form2:=TForm2.create(Application);
Form2.ShowModal;
finally
form2.free;
form2:=nil;
end;
end;