Form生成时的事件次序

字体大小: 中小 标准 ->行高大小: 标准
OnCreate-->OnShow-->OnPaint-->OnActivate-->OnResize-->OnPaint-->OnCloseQuery-->OnClose-->OnDeactivate-->OnHide-->OnDestroy

 

问题:我做了一个 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 中, 不过,OnPain是一个常发生的事件,所以应该要在主视窗的类别定义中额外加上一个 private 的逻辑成员资料变数,以控制不要每次视窗重画时都检查设定.

此文章由 http://www.ositren.com 收集整理 ,地址为: http://www.ositren.com/htmls/67995.html

相关