这是为什么呀?(20分)

  • 主题发起人 主题发起人 cooldren
  • 开始时间 开始时间
C

cooldren

Unregistered / Unconfirmed
GUEST, unregistred user!
在Button中加入如下代码:
if xxxfrm=nil then xxxfrm:=TxxxFrm.create();
TxxxFrm.showmodal;

在xxxFrm的OnClose中加入如下代码;
action:=caFree;

xxxFrm为对话框
打开xxxFrm窗口后,关闭,再打开,就出现错误,请问大侠,这是怎么回事呀?
谢谢!
 
if xxxfrm=nil then xxxfrm:=TxxxFrm.create();
TxxxFrm.showmodal;
freeannil(TxxxFrm);
 
在xxxFrm的OnClose中加入如下代码;
modalresult:=mrcancle;
 
在xxxFrm的OnClose中加入如下代码;
action:=caFree;
xxxfrm:=nil;
 
在Button中加入如下代码:
with TxxxFrm.create(nil) do
try
TxxxFrm.showmodal;
finally
free;
end;

在xxxFrm的OnClose中加入如下代码;
modalresult:=mrcancel;


 
上面已经回答了,我说一下原因就走。呵呵。

你的创建判断是以xxxFrm 这个指针(对象名字就是指针啦)是否为nil来判断的。
你在xxxFrm的onclose事件里只释放了这个对象所占据的资源,却没有把xxxFrm这个指针变量赋为nil(傻了吧,这需要手工显式做的),他在第一次正确创建后就有了一个地址值,而被释放后这个值依然保留,所以第二次执行创建语句时,if 判断为 false ,所以压根就没有执行创建语句就打开xxxFrm 这个变量所指向的窗体对象了。当然出错。
 
多人接受答案了。
 
后退
顶部