Free做什么了?(50分)

  • 主题发起人 主题发起人 hzjzxp
  • 开始时间 开始时间
H

hzjzxp

Unregistered / Unconfirmed
GUEST, unregistred user!
在本窗体中一个按钮事件,把本窗体的panel赋值到另外一个窗体.
代码如下:
var
Form2:TForm2;
begin
Form2:=TForm2.Create(Self);
Panel1.parent := Form2;
Panel1.Align := alClient;
Form2.ShowModal;
//form2.free;
隐掉这句正常,否则到Panel1.parent := Form2;
报错
end;

不知道为什么Form2不能free , FreeAndNil都不行,请大家赐教.
 
对像的资源的收发是由OWNER来控制,而不是由parent控制.--------楼主D的面向对像知识不够
 
楼上没明白我的意思吧!
不过自己搞定了!
Form2.Free 时把Panel1赋为nil
再对Panel1操作时会出错!
自己没好好想,不好意思!
 
是吗,我用你的代码调试怎么没有出现问题??
另外luoyanqing119,不晓得你的解释和楼主的提问有什么关联
 
to:muhx
//form2.free 注释没去吧
 
我注释去了
我用的是Delphi 7
 
去掉注释,按钮点一次没问题,再点一次就出错了。
代码本身写的没问题,与form2.free没关系。
 
to :gulang
应该是form2.free 时把panel1置nil了
如果不是form2.free的问题,哪是什么问题
 
form2.free会释放Panel,panel释放的时候会通知owner即Form1的。所以当Form2释放了,Panel也就没有了。再点按钮的时候,panel已经释放了,执行panel.parent当然要出错了。
 
var
Form2:TForm2;
begin
Form2:=TForm2.Create(nil);
try
Panel1.parent := Form2;
Panel1.Align := alClient;
Form2.ShowModal;
finally
form2.free;
//隐掉这句正常,否则到Panel1.parent := Form2;
报错
end;
end;

//Form2:=TForm2.Create(Self);这个Create的参数如果为Self则由其所在的窗体控制释放,改成NIL就由你自己释放了。。。
 
初学DELPHI的,介绍几个网址,对大家有帮助的。
http://iinsnian.cnblogs.com/
http://del.cnblogs.com/
这两个地址里介绍了很多DELPHI的技巧。
 
又创建又释放,当然不行了
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
716
import
I
I
回复
0
查看
319
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部