私は現在、特定の時間にメイン フォーム (Form1) が別のフォーム (Form2) を表示する VB.NET のアプリケーションをサポートしています。Form2 が表示されると、Form2 から発生するイベントをキャプチャするハンドラーが追加されます。
簡単な例を次に示します。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete
End Sub
Private Sub CalibrationCheckComplete()
MessageBox.Show("Form2 Event raised.")
End Sub
End Class
Public Class Form2
Public Event CalibrationCheckComplete()
Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
RaiseEvent CalibrationCheckComplete()
End Sub
End Class
この例では、イベントが発生したときに MessageBox を表示する Form2 のイベントにハンドラーを追加するだけです。実際のアプリケーションでは、このコールバック関数が呼び出されるときに Form1 で定義された多くの変数などを使用しています。
ここで、別のインスタンスで Form2 を表示し、同じコールバック関数を利用して、どのインスタンスがそれを呼び出したかを確認します。しかし、コールバック (AddressOf) 関数にパラメーターを渡そうとすると問題が発生します。
「'AddressOf'オペランドはメソッドの名前でなければなりません(括弧なし)」というエラーが発生した私の試みは次のとおりです。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete(1)
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Form2.Show()
AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete(2)
End Sub
Private Sub CalibrationCheckComplete(ByVal number As Integer)
MessageBox.Show("Form2 Event raised. Called from number:" & number)
End Sub
End Class
Public Class Form2
Public Event CalibrationCheckComplete()
Private Sub Form2_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
RaiseEvent CalibrationCheckComplete()
End Sub
End Class
整数などのパラメータを AddressOf 関数に渡し、最初にどの関数がそれを呼び出したかを特定するにはどうすればよいですか?