我目前支持 VB.NET 中的应用程序,其中主窗体 (Form1) 在特定时间显示另一个窗体 (Form2)。当显示 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
此示例只是将处理程序添加到 Form2 上的事件,该事件在引发事件时显示 MessageBox。当这个回调函数被引发时,实际的应用程序正在使用 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 函数,然后确定最初调用它的函数?