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

Mar*_*oDS 6 vb.net local-variables event-handling

我在VB.NET中有一个表单,用作mainform中的对话框.它的实例总是在本地定义,没有字段.当用户单击对话框中的"确定"按钮时,它将使用一个参数(我的一个类的实例)触发一个事件.

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

活动代码,一个字段MyDialog:

public Event ObjectCreated(ByRef newMyObject as MyObject)
Run Code Online (Sandbox Code Playgroud)

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

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

正如您所看到的,我坚持如何为我的事件添加处理程序.谁能帮我?最好的方法是做到这一点......

Mik*_*rie 6

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

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

Public Class MyObjectEventArgs
    Inherits EventArgs

    Public Property EventObject As MyObject

End Class
Run Code Online (Sandbox Code Playgroud)

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

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs)

Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs)
    ' Handler code here
End Sub
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令将处理程序附加到事件

AddHandler ObjectCreated, AddressOf Container_ObjectCreated
Run Code Online (Sandbox Code Playgroud)

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

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