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 的逻辑成员资料变数 , 以控制不要每次视窗重画时都检查设定 .