编程语言

img zhengyongchen

C++ Builder开发点滴

发表于2004/10/20 18:58:00  916人阅读

2004-10-20 星期三
1、窗体的OldCreateOrder属性。

如果要问你,窗体类的构造函数和OnCreate事件中的代码哪个先执行,你可能会毫不犹豫的回答肯定是构造函数的代码先执行。事实上并非如此,最近在使用窗体继承时就碰到这样一个问题。我首先定义了一个基本窗体TChildBaseForm,然后以该窗体作为基础以继承方式创建窗体TUserInfoForm。在跟踪程序的时候发现,竟然是TUserInfoForm窗体的OnCreate事件处理代码先执行,然后才执行构造函数的代码。

为什么会出现这样的情况呢?后来查找TForm的帮助,发现TForm有这样一个属性OldCreateOrder,看看帮助是如何说明的:

When OldCreateOrder is false (the default) the OnCreate event occurs after all constructors are finished (from the AfterConstruction method) and the OnDestroy event occurs before any destructors are called (from the BeforeDestruction method).

This timing differs from C++Builder 1, where the OnCreate event occurred when the TCustomForm constructor executed and the OnDestroy event occurred when the TCustomForm destructor executed. Applications that require the OnCreate event and OnDestroy events to occur from the constructor and destructor of the form can set OldCreateOrder to true.

也就是说,如果OlderCreateOrder属性设置成false,那么OnCreate事件就会在所有构造函数完成之后触发,OnDestroy事件在析构函数调用前触发。反之,OlderCreateOrder等于true,次序就相反。现在,窗体的OlderCreateOrder缺省是为False,但是你如果从一个自定义的窗体继承时,该属性值就是True了,除非你手工改动它(在属性编辑器中是看不到该属性,只能修改DFM文件)。

阅读全文
0 0

相关文章推荐

img
取 消
img