如何在 VB.NET 中将事件处理程序添加到局部变量



我在 VB.NET 中有一个表单,用作主窗体中的对话框。它的实例始终是本地定义的,没有字段。当用户单击对话框中的"确定"按钮时,它将触发一个只有一个参数的事件,即我的一个类的实例。

由于它始终是局部变量,因此如何为该事件添加事件处理程序?我已经搜索了自己并找到了一些东西,但我真的无法弄清楚......

事件的代码,MyDialog字段中的字段:

public Event ObjectCreated(ByRef newMyObject as MyObject)

要调用对话框的主窗体的代码:(不要介意语法)

Dim dialog As New MyDialog()
dialog.ShowDialog(Me)
AddHandler ObjectCreated, (what do I put here?) //Or how do I add a handler?

如您所见,我无法为事件添加处理程序。谁能帮我?最好是最好的方法...

为了保持一致性,建议使用与所有系统事件处理程序相同的源和事件参数模型。

创建自己的从 EventArgs 继承的类,如下所示:

Public Class MyObjectEventArgs
    Inherits EventArgs
    Public Property EventObject As MyObject
End Class

然后声明您的事件和处理程序方法,例如:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs)
Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs)
    ' Handler code here
End Sub

然后使用以下方法将处理程序附加到事件:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated

此外,您可以使用Handles附加到从主窗体(假设名称为 MainForm)引发的事件,如下所示:

Private Sub MainForm_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) Handles MainForm.ObjectCreated
    ' Handler code here
End Sub

您需要编写生成事件时实际执行的子例程:

public Sub OnObjectCreated(ByRef newMyObject as MyObject)
   ...
End Sub

然后添加处理程序:

AddHandler ObjectCreated, AddressOf OnObjectCreated

作为旁注,ByRef在这里什么都不做。 VB 中的所有对象都是通过引用传递的。 默认情况下,只有基元变量(字符串、整数等)使用 ByVal,并且可以设置为 ByRef

最新更新