MDIFormのイベント

解決


 2002-11-06 22:51:44  No: 76320  IP: [192.*.*.*]

MDIChildFormのLoad、UnLoadイベントやActivete、Deactivateイベントが発生するタイミングを
親のMDIFormが知ることは出来るのでしょうか?

編集    削除
Say  2002-11-06 23:55:12  No: 76321  IP: [192.*.*.*]

事前に知ることは不可能です。
メッセージが流れて、イベントプロシージャに渡る直前に捕まえることなら
メッセージフックかサブクラス化で可能です。

イベントプロシージャに渡った直後でいいなら、
各イベントプロシージャ内でフラグを立てるなり、
実行したい関数を呼ぶなり、親にSendMessageするなりしてください。

編集    削除
 2002-11-07 21:09:29  No: 76322  IP: [192.*.*.*]

やはり、各イベントプロシージャ内で何らかの処理が必要になってくるんですね。
イベントプロシージャ内で実行したい関数を呼ぶことにします。

編集    削除
魔界の仮面弁士  2002-11-23 00:23:17  No: 76323  IP: [192.*.*.*]

子イベント発生直後でもよければ、WithEventsで拾えます。

Option Explicit

Private WithEvents Child As VB.Form

Private Sub Child_Activate()
    Debug.Print "Form_Activate"
End Sub

Private Sub Child_Load()
    Debug.Print "Form_Load"
End Sub

Private Sub Child_Unload(Cancel As Integer)
    Debug.Print "Form_Unoad"
End Sub

Private Sub MDIForm_Load()
    Set Child = New Form1
    Child.Show
End Sub


# この場合、フォーム数分のWithEvents変数が必要となります。
# もし、子フォーム数が不定である場合は、イベント管理用の
# クラスを、別途自作する必要があります。

編集    削除