窗口ShowModal后,还能访问其public变量?(100分)

  • 主题发起人 主题发起人 Micro Whaight
  • 开始时间 开始时间
M

Micro Whaight

Unregistered / Unconfirmed
GUEST, unregistred user!
比如窗口Child(非自动创建)中定义有public变量FName,
在它的一个Button的OnClick过程中,随便写一个:
FName := 'Test';

在它的OnClose中:
Action := caFree;

然后另一个窗口Main的一个ButtonOnClick做如下调用:

frmChild := TfrmChild.Create(Self);
frmChild.ShowModal;
sValue := frmChild.FName
//???!!!
ShowMessage(sValue);

这段代码可以正常执行得出结果.可是, ShowModal后,应该
是释放了窗口,可是为什么还能得到FName的值?
 
原因是frmChild没有释放。

对于frmChild,我一般的情况都是显示的释放:

try
ShowModal;
finally
Free;
frmChild:=nil;
end;
 
可怕的事情。我一般都是在OnClose中用 Action := caFree 完成。

刚才再做了测试,把ShowMessage(sValue)写两次,结果第一次可以得到值,第二个
ShowMessage就是空了。难道说,刚刚ShowModal完后(Show的窗口用OnClose事件来
Action := caFree)的窗口,紧接着后面的一句还可以访问到?第二句就不
行了?
 
是编译器进行处理了,另外跟Create的时候的对象也有关系。
 
你可能用的是Delphi5,Delphi6已经没这问题了。
我在把我的程序从5升到6时就因为这个差点跟着大家起哄说D6的不是,最后发现是D5的Bug.
 
谢谢各位解答。

另:
不好意思,不能平分。对不起两位了。
 
后退
顶部