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

6
我在 VB.NET 中有一个表单,作为主窗体的对话框使用。它的实例总是在本地定义,没有字段可用。当用户在对话框中点击 OK 按钮时,它将触发一个事件,仅带有一个参数,即我的某个类的实例。
由于它始终是本地变量,我如何为该事件添加事件处理程序?我已经自己搜索了一些内容,但我真的搞不清楚...
以下是事件代码,在 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?

你们看,我不知道如何为我的事件添加处理程序。有人能帮帮我吗?最好是用最佳方法...

2个回答

7

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

创建一个继承自 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

@MarioDeSchaepmeester 我认为你的问题包括“最好的方法是什么...”。你为什么要取消标记我的答案? - Mike Guthrie
我立刻意识到了这一点,所以我再次接受了你的请求,抱歉造成困扰。 - MarioDS

1
你需要编写在事件生成时实际执行的子例程:
public Sub OnObjectCreated(ByRef newMyObject as MyObject)
   ...
End Sub

然后添加处理程序:

AddHandler ObjectCreated, AddressOf OnObjectCreated

作为附注,ByRef 在这里没有任何作用。在 VB 中,所有对象都是按引用传递的。只有原始变量(字符串、整数等)默认使用 ByVal,并且可以设置为 ByRef。

哇,这简单多了...我实际上缺少的只是AdressOf关键字! - MarioDS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接