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

时间:2012-04-25 15:47:43

标签: vb.net event-handling local-variables

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

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

活动代码,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 个答案:

答案 0 :(得分:6)

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

创建自己的继承自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

答案 1 :(得分:1)

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

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

然后添加处理程序:

AddHandler ObjectCreated, AddressOf OnObjectCreated

作为旁注,ByRef在这里什么都不做。 VB中的所有对象都通过引用传递。默认情况下,只有primitave变量(string,int等)使用ByVal并且可以设置为ByRef