您现在的位置: 天下网吧 >> 网吧天地 >> 天下码农 >> 后端开发 >> PHP >> 正文

Form生成时的事件次序

2009-1-19CFAN整理佚名
问题:我做了一个 MDI FORM,当MDI Form出现以後,如果判断出某些资料未设定,
要再出现一个Form2.ShowModal设定资料的对话盒,应该写在那儿呢?我试过的
OnActivate ,OnShow ,但MDI Form皆未出现就去执行这部份程式,就出现错误了。
要解决这个问题, 首先要了解从 Form 产生的""个过程中, 各事件发生与执行的次序
如果是一般的 SDI Form, 各事件的发生次序如下:
OnCreate
OnShow
在萤幕上看到这个视窗
OnActivate
OnPaint
如果是 MDI 视窗, 而 MdiChild 的第一个子视窗是在程式启动时, 就出现在MdiForm
中的话,
那麽,各事件的次序是
主视窗的 OnCreate
子视窗的 OnCreate
子视窗的 OnShow
子视窗的 OnActivate
主视窗的 OnShow
在萤幕上看到主视窗及第一个子视窗
主视窗的 OnPaint
ok, 您发现了吗? OnShow 是在视窗被看到之前的事, 而 OnActivate 并没有发生,
因此,
您的问题中所采用的 '我试过的 OnActivate ,OnShow ....',
当然不能在视窗於'被看到後'才出现设定资料的对话盒
因此, 以您的状况, 检查与设定的程式可以写在主视窗的 OnPaint 中, 不过,
OnPaint
是一个常发生的事件,所以应该要在主视窗的类别定义中额外加上一个 private 的逻

成员资料变数,以控制不要每次视窗重画时都检查设定.
另外, 有一个方法您可以参考看看:
1. 利 Options | Project , 将子视窗从 Auto-Create forms 移到 Available
forms,
不要让 Delphi在程式启动时就产生 MdiChild 子视窗
2. 此时, 虽然是 MDI 架构, 但是 MDI 主视窗产生时的各事件次序与一般视窗相同,
您的检查与呼叫设定视窗的程式可以写在 OnActivate 中
3. 各子视窗的产生, 以Application.CreateForm 方法,写在您的应用程式主选单的
File | New Click 事件中,以手动的方式让子视窗出现在主视窗中
最後, 视窗内部的资料起始与设定, 我一般是写在 Form 的OnCreate 事件中.

欢迎访问最专业的网吧论坛,无盘论坛,网吧经营,网咖管理,网吧专业论坛 https://bbs.txwb.com

关注天下网吧微信/下载天下网吧APP/天下网吧小程序,一起来超精彩

本文来源:CFAN整理 作者:佚名

声明
声明:本站所发表的文章、评论及图片仅代表作者本人观点,与本站立场无关。若文章侵犯了您的相关权益,请及时与我们联系,我们会及时处理,感谢您对本站的支持!联系邮箱:support@txwb.com,系统开号,技术支持,服务联系QQ:1175525021本站所有有注明来源为天下网吧或天下网吧论坛的原创作品,各位转载时请注明来源链接!
天下网吧 网吧天下