と の両方に対する要件に基づいて、最良の解決策は を使用することだreturn a valueとcall a procedure on the calling form思いますEvents。概念を示すために簡単な例を見ていきます。
この例では、Parent Formと がありChild Form、各フォームに と があるButtonとしTextBoxます。
- 親フォームのボタンをクリックすると、子フォームが生成され、その ValueChanged イベントに登録されます。
- 子フォームのボタンをクリックするとイベントが発生し、その TextBox の値がイベントを購読しているすべての人に渡されます。
のコードは次のParent Formとおりです。
Public Class ParentForm
Private Sub ParentButton_Click(sender As System.Object, e As System.EventArgs) Handles ParentButton.Click
Dim child As New ChildForm
AddHandler child.ValueChanged, AddressOf ChildFormValueChanged
child.Show()
End Sub
Private Sub ChildFormValueChanged(ByVal NewValue As String)
ParentTextBox.Text = NewValue
End Sub
End Class
のコードは次のChild Formとおりです。
Public Class ChildForm
Public Event ValueChanged(ByVal NewValue As String)
Private Sub ChildButton_Click(sender As System.Object, e As System.EventArgs) Handles ChildButton.Click
RaiseEvent ValueChanged(ChildTextBox.Text)
End Sub
End Class
AddHandlerコードは重要Parent Form to subscribe to the Child Form's ValueChanged Eventです。specify a procedure to execute when the event has firedこのシナリオでは、ValueChanged イベントが発生するたびに、親 TextBox の値が子 TextBox の値と等しくなることがわかります (この例では、これは子のボタンがクリックされたときに発生します)。
Event 宣言内に複数の引数と任意のデータ型を入れることができますが、発生したときに実行されるプロシージャ (つまり、ChildFormValueChanged) が Event と同じシグネチャを持っていることを確認する必要があるだけです (引数とデータ型が同じであることが期待されます)。 )。