首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Delphi > 窗体的构造函数和OnCreate事件
【标  题】:窗体的构造函数和OnCreate事件
【关键字】:OnCreate
【来  源】:BLOG.CSDN.NET

窗体的构造函数和OnCreate事件

窗体的构造函数和创建事件和OldCreateOrder属性有很大的关系。

情况1

如果窗体继承自TForm,且有如下形式:

1.      constructor TForm1.Create(AOwner: TComponent);

2.      begin

3.        inherited;

4.        Button1.Caption := '1';

5.      end;

6.     

 

7.      procedure TForm1.FormCreate(Sender: TObject);

8.      begin

9.        Button1.Caption := '2';

10.  end;

此时,设Tform1OldCreateOrder(默认就是为False)属性为False,则执行顺序是349行。

如果设OldCreateOrderTrue,则执行顺序为394,即先执行inherited然后执行Button1.Caption := '2'再执行Button1.Caption := '1'

看帮助,解释是如果OldCreateOrderFalse,则OnCreate将在所有构造函数执行完之后才执行。如果OldCreateOrderTrue,则OnCreateTCustomForm的构造函数执行完就执行。

这样就很容易理解上面的执行顺序了,OldCreateOrderTrue时,执行到第3行时,便会调用TCustomFormCreate函数,该函数执行完后就调用OnCreate了,当然也就执行了第9行,最后才回来执行第4行。而OldCreateOrderFalse时则等所有构造函数执行才调用onCreate事件。

 

为什么有这样的行为呢,还是看源代码:

事实上OnCreate会在两处地方被调用,一是TCustomFormCreate函数,一是AfterConstructor函数。

TCustomFormCreate函数中,是这样的:

if OldCreateOrder then DoCreate;

AfterConstruction函数中,是这样的:

if not OldCreateOrder then DoCreate;

 

这样就一清二楚了,同时也了解了AfterConstruction的执行时机,即所有的构造函数执行完毕后才由编译器调用。

 

情况2

如果窗口继承自一个已经存在的窗口类比如TForm1,同时有像下面这样的代码:

1.      constructor TForm2.Create(AOwner: TComponent);

2.      begin

3.        inherited;

4.        Button1.Caption := '1';

5.      end;

6.     

 

7.      procedure TForm2.FormCreate(Sender: TObject);

8.      begin

9.        Button1.Caption := '2';

10.  end;

无论怎么设OldCreateOrder,都只是执行394原因就是最后OldCreateOrder都是等于True。为什么会一直等于True呢,找不出原因,大概是读取窗体资源文件时作了些什么处理吧。

 

 

字符串通用代码:【上一篇】
六、写程序与做软件:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • photoshop画笔工具与铅笔工具
  • Struts 与 Velocity 的集成
  • 第7章 内存管理
  • Replacing init with Upstart
  • IT进化的下一个命题:网格计算引爆许可证变革
  • Redhat Linux 9教学讲义-IT同路人主讲
  • 自己的程序自己做
  • DB2 V9 火热出炉! - 快报
  • 如何励志成就JAVA
  • vc++将数字和日期转成字符串
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.