これは簡単に行うことができます。VBWithEvents
とHandles
構文をステップ実行するだけで取得できます。
Public Class ParentForm
Event OnDoSomething()
Private Sub DoSomething()
RaiseEvent OnDoSomething()
End Sub
End Class
その後
Public Class ChildForm
Public Sub New()
InitializeComponent()
AddHandler ParentForm.OnDoSomething, AddressOf DoSomething
End Sub
Private Sub DoSomething()
' do something
End Sub
Private Sub ChildForm_FormClosing(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.FormClosingEventArgs) _
Handles MyBase.FormClosing
RemoveHandler ParentForm.OnDoSomething, AddressOf DoSomething
End Sub
End Class
子フォームを破棄する前に、イベント ハンドラーが削除されていることを常に確認することが重要です (そうしないと、メモリ リークが発生します)。
上記は、VB の既定のインスタンスを使用していることを前提としていParentForm
ます。そうでない場合は、それに応じて参照する必要があります。より良いアプローチは、次のように親をコンストラクターの引数にすることです。
Public Sub New(ByVal parent as ParentForm)
InitializeComponent()
AddHandler parent.OnDoSomething, AddressOf DoSomething
End Sub
もちろん、RemoveHandler
セクションも変更します (親への参照を保持する必要があります)。ParentChanged
もう 1 つのオプションは、これが MDI アプリケーションの場合、イベントでフック/アンフックすることです。
他の唯一の注意点は、構築中に自己参照になってしまうため、親フォームのコンストラクターで子フォームを作成できないことです。