1

我目前支持 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 函数,然后确定最初调用它的函数?

4

1 回答 1

1

您必须创建不同的函数,每个函数都处理数字

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form2.Show()
    AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete1
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Form2.Show()
    AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete2
End Sub

Private Sub CalibrationCheckComplete1()
    CalibrationCheckComplete(1)
End Sub

Private Sub CalibrationCheckComplete2()
    CalibrationCheckComplete(2)
End Sub

Private Sub CalibrationCheckComplete(ByVal number As Integer)
    MessageBox.Show("Form2 Event raised. Called from number:" & number)
End Sub

但我会质疑你在做什么。如果 Form2 知道它是如何打开的,那可能会更好。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Form2.Number = 1
    Form2.Show()
    AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    Form2.Number = 2
    Form2.Show()
    AddHandler Form2.CalibrationCheckComplete, AddressOf CalibrationCheckComplete
End Sub

Private Sub CalibrationCheckComplete()
    MessageBox.Show("Form2 Event raised. Called from number:" & Form2.Number)
End Sub
于 2015-02-25T14:32:22.283 回答