まず、イベントを持つクラスを作る。(以下、イベントクラス)
Invokeメソッドを呼ぶと、イベントを発動するだけのクラスである。
Option Explicit 'イベントハンドラ Public Event Hello(message As String) 'イベント発動のためのメソッド Public Sub Invoke() RaiseEvent Hello(DateTime.Now) End Sub
MainFormは、イベントクラスのインスタンスを持っている。MainFormもイベントを購読している。
CreateSubFormボタンを押すとSubFormを作り、イベントクラスの参照を渡す。SubFormのRaiseボタンを呼ぶと、イベントクラスのInvokeを呼ぶ。
すべてのイベントハンドラが呼ばれた!
以下は、フォームのソースコード
Option Explicit 'イベントを持つクラス Public WithEvents ObjWithEvent As ClassWithEvent 'イベントハンドラに相当 Private Sub ObjWithEvent_Hello(message As String) Me.Caption = message End Sub 'クラスにイベント発動を依頼 Private Sub RaiseButton_Click() ObjWithEvent.Invoke End Sub 'コンストラクタの代わり Public Sub Init(obj As ClassWithEvent) Set ObjWithEvent = obj End Sub
Option Explicit 'イベントを持つクラス Public WithEvents ObjWithEvent As ClassWithEvent 'フォームを並べて表示するのに使用 Private lastTop As Long 'イベントハンドラに相当 Private Sub ObjWithEvent_Hello(message As String) Me.Caption = message End Sub 'サブフォームを作る Private Sub SubFormCreateButton_Click() Dim Form As New SubForm Call Form.Init(ObjWithEvent) Form.Left = Me.Left Form.Top = lastTop Form.Show lastTop = Form.Top + Form.Height '縦に並べる End Sub 'アプリ強制終了 Private Sub ExitButton_Click() End End Sub 'フォーム初期化 Private Sub Form_Load() Set ObjWithEvent = New ClassWithEvent lastTop = Me.Top + Me.Height End Sub
0 件のコメント:
コメントを投稿