6

我在 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?

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

4

2 回答 2

6

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

创建您自己的继承自 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
于 2012-04-25T16:04:52.490 回答
1

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

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

然后添加处理程序:

AddHandler ObjectCreated, AddressOf OnObjectCreated

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

于 2012-04-25T16:14:28.747 回答