窗体事件驱动链分析
来源:互联网 发布:apk软件脱壳 编辑:程序博客网 时间:2024/06/15 16:56
关于OnCreate和OnDestory事件:
1. Form的OnCreate事件是不可靠的,并不像名字所说的当窗体一创建时就执行,而是当窗体是工程的主窗体或是一个继承其它窗体的子窗体时才执行.所以,在OnCreate()中初始化变量和创建对象是不合适的;
2. 在有继承情况下,OnCreate事件先于构造函数发生,对应地OnDestroy事件后于析构函数发生。
关于窗体的构造函数和析构函数
1. 对于任何窗体,构造函数和析构函数是可靠的,因为它每一次创建和销毁窗体时都会执行。所以我们应在构造函数中进行程序的初始化操作,在析构函数中清理资源;而不要在OnCreate和OnDestory事件中进行处理;
2. 在继承情况下BCB子窗体对象的构造过程是先构造父窗体,再构造子窗体,这点与C++完全一样,销毁过程则反之;
3. 在有继承的情况下,父类窗体的构造函数和析构函数则会被执行多次,所以,在这两个地方不要new和delete对象,而应将这类代码放到具体的子窗体类中。如果不这样做,可能会由于多次删除同一对象而引发错误,除非将父类窗体的对象指针声明为static的,保证所有子类共享此new的唯一对象!
4.析构函数总是最后调用的,而构造函数总是第一个调用。
关于Owner参数:
当Owner=Application时,先销毁new出来的窗体,再销毁主窗体;
而当Owner=this(指主窗体)时,先销毁主窗体,再销毁子窗体;
这个原则对于在窗体内部动态地生成VCL控件时也适用。特别地,当程序中用到了数据模块,或需要动态地生成DataSet等对象时更要注意。因为一个DataSet可能会向多个窗体提供数据(应该避免这样做,合适的方法是new TDataSet时Owner参数不设为Application)。
其它:
1.一个Visible=true的窗体一定要先Hide,才能被销毁。
2.程序事件链的源头为工程中的主窗体的构造函数
3.在有继承情况下,子类窗体实例一定要先Hide才可以被销毁。
4.多窗体的管理BCB采用了栈的方法,按创建的次序,先创建的后销毁,千万要避免先创建的窗体含有对后创建的窗体(或其上的控件)的指针。
5.关闭时一定会发生OnCloseQuery事件,如果是MDI,此事件还会在MDIChild窗体中传播,所以,在这个地方提示用户改变是合适的。
6.有些事件一发生,则定然会跟着一系列的事件,这些事件发生的次序是不变的,比如,只要OnShow事件发生,则一定会接着发生以下事件:
àOnActivate()àOnCanResize()àOnConstrainedResize()àOnResize()
OnCloseQuery之后一定是OnClose()
- 窗体事件驱动链分析
- Effective BCB Form Program(1) ——窗体事件驱动链引发程序错误分析
- c# Windows窗体与事件驱动
- Effective BCB Form Program(2) ――窗体事件驱动链引发程序错误.
- evdev输入事件驱动分析
- Nginx源码分析-事件驱动的初始化
- Nginx源码分析--事件驱动的初始化
- libevent项目分析(四) -- 事件驱动
- Nginx源码分析-事件驱动的初始化
- Netty4 SEDA 事件驱动原理分析
- Redis ae事件驱动源码分析
- nginx源码分析--event事件驱动初始化
- nginx源码分析--event事件驱动初始化
- redis ae事件驱动的源码分析
- 09 事件驱动的OSAL简要分析
- libevent源码学习-----事件驱动流程分析
- 深入分析Spring事件驱动模型
- [转]linux 输入设备驱动程序 事件驱动层 分析
- 重新启用BLOG
- 多线程高性能 7x24小时 Java NewIO 程序 小结
- Oracle中的临时表用法汇总
- [转]JDK 1.4中与安全有关的部分
- SQL系列教程之基本SELECT命令
- 窗体事件驱动链分析
- jsp重复提交数据
- 如何避免成为技术官僚?
- SQL Server的六种数据移动方法
- 基本图象处理代码
- Linux共享库(一)
- DLL 导出类必须要导出接口
- 白岩松:我们应从家乐福事件中跳出来
- SQL Server数据库安全规划全攻略