小问题。

simonzone 2002-08-05 01:09:50
form.Create(self) 与 form.create(application) 有什么区别吗?
...全文
76 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
chao_jian 2002-08-05
  • 打赏
  • 举报
回复

很好,顺便展开一个问题,请指教:

Owner和Parent属性都和内存管理有关,那么它们之间在这方面存在存在哪些区别?谢谢!
hellenlong 2002-08-05
  • 打赏
  • 举报
回复
来晚了.
up
dreamfan 2002-08-05
  • 打赏
  • 举报
回复
有道理
王集鹄 2002-08-05
  • 打赏
  • 举报
回复
http://www.delphibbs.com/delphibbs/dispq.asp?lid=834435
http://www.delphibbs.com/delphibbs/dispq.asp?lid=791383
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1133232

问题:请问Application、Self和nil有什么区别? ( 积分:45, 回复:7, 阅读:52 )
分类:控件 - 使用 ( 版主:amo, cAkk )
来自:11830, 时间:2002-5-30 15:15:00, ID:1133232 [显示:小字体 | 大字体]
请问我在动态建立控件时使用的Application、Self和nil有什么区别
TempAQ_GetAllSum:=TADOQuery.Create(Application);

TempAQ_GetAllSum:=TADOQuery.Create(Self);

TempAQ_GetAllSum:=TADOQuery.Create(nil);


来自:Alex_Y, 时间:2002-5-30 15:24:00, ID:1133255
我是这么理解的( 不一定说的对 ):
Application 是应用程序的属性意为在应用中创建ADOQUERY对象
Self 很简单,就是创建自己
nil 为空?这样也可以吗?没试过


来自:LGXing, 时间:2002-5-30 15:31:00, ID:1133275
我是这么理解的( 不一定说的对 ):
Application 属于此应用程序的对象
Self 属于当前窗体
nil 自成一体


来自:11830, 时间:2002-5-30 15:34:00, ID:1133288
谢谢你们的回复!
哪它们在使用上有什么区别呢?
我现在也不清到底用哪个好,有时用application,有时用nil。
请问您们都怎么用这个?


来自:Archerfl, 时间:2002-5-30 16:28:00, ID:1133377
TADOQuery.Create(AOwner: TComponent);是对其祖先类TComponent的构造器的覆盖。
其中AOwner是指你所创建的对象的拥有者。如本例,假如是Application,那么此时拥有者
为整个应用程序对象Application。同理self则拥有者为当前窗体对象,nil则不存在拥有者。
其实,你在写代码时这几种方式都可以,区别仅在与:当你用Application做拥有者时,那么
该对象假如你不是用Free方法手动释放内存的,那么就要等到Application对象被释放时,它
才会一起被释放;而你用self时,则要等到该窗体对象释放时,它才一起被释放;nil,则它
要等到整个应用程序被释放时,它才会被释放。
不过,你应尽可能养成不用时释放对象的习灌,以防出现内存泄漏!



来自:Anubis99, 时间:2002-5-30 16:40:00, ID:1133411
Archerfl说的很正确


来自:11830, 时间:2002-5-31 8:45:00, ID:1134395
接受答案了.


来自:11830, 时间:2002-5-31 8:50:00, ID:1134409
好像明白了,谢谢!


来自:archy, 时间:2001-12-16 1:14:00, ID:791383 [显示:小字体 | 大字体]
动态创建一个窗口时form1:=Tform1.create(Application)
form1:=Tform1.create(nil);和
form1:=Tform1.create(self)有何区别?似乎一样的吗


来自:乌龙茶, 时间:2001-12-16 1:19:00, ID:791384
用application 作为参数,则由application负责释放当前窗体
如果用self则由当前类负责释放
如果用nil则由你自己负责释放,否则将会造成内存泄漏


来自:QY208, 时间:2001-12-16 2:22:00, ID:791424
同意楼上


来自:barton, 时间:2001-12-16 5:13:00, ID:791438
不完全正确.
1.使用Application作为参数时的确可以由Application来释放.但你不能依赖Application
去释放.因为只有Application释放的时候才会去释放没有被释放的类.可是你能等到那个时
候吗?你能容忍一个没有用处的类占用宝贵的资源吗?所以常常是即用即撤.不过可以保证没
有内存泄漏是真的.
2.nil参数建立窗体时必须主动释放.在动态建立DLL中的窗体时,使用Application常常出错.
这时候只能用nil作为参数,或者用Application.Handle作为参数,以保证在同一个消息体系
中.
3.使用Self作为参数几乎是错误的.一是,这种用法只能在粝方法中处理,如何这个类不是个
窗体容器的话,毫无意义.至少如果这个Self如果是个TForm的话,难保不出错.


来自:zouming, 时间:2001-12-16 9:11:00, ID:791455
agree to barton


来自:archy, 时间:2001-12-22 14:37:00, ID:804407
to barton:
非常感谢,但是我的《Mastering Delphi 5》中说
动态建立MDIchild时是frmChild:=TfrmChild.create(self);不知您认为如何


来自:树熊132, 时间:2002-1-4 15:25:00, ID:834435 [显示:小字体 | 大字体]
谁能告诉我form.create(self)与form.create(nil)的区别



来自:jiangxiancheng, 时间:2002-1-4 15:37:00, ID:834468
所有者不一样。


来自:taozhiyu, 时间:2002-1-4 15:41:00, ID:834478
AOwner is the owner of the TCustomForm object.


来自:wonsfon, 时间:2002-1-4 16:28:00, ID:834592
xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放
xx.create(nil)之后,你在程序结束时必须手工释放xx


来自:lujr, 时间:2002-1-4 16:32:00, ID:834600
WONSTON的说法是对的。
xx.create(AOwner)之后,当AOwner被释放时xx也被自动释放
xx.create(nil)之后,你在程序结束时必须手工释放xx




来自:yhaochuan, 时间:2002-1-4 16:48:00, ID:834643
wonsfon说得对,
如果你在一个FORM中动态建立另一个FORM2,那么建议用

procedure form1.button1.click(sender:tobject);
begin
if form2 = nil then
form2 := tform2.create(self);
form2.showmodal;
end;


njbudong 2002-08-05
  • 打赏
  • 举报
回复
用self创建的Form是私有的,在关闭的时候是资源释放的;
用application创建的Form是不释放的,只有在应用程序关闭的时候才释放。

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧