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