Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VB.NET中向局部变量添加事件处理程序_Vb.net_Event Handling_Local Variables - Fatal编程技术网

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

如何在VB.NET中向局部变量添加事件处理程序,vb.net,event-handling,local-variables,Vb.net,Event Handling,Local Variables,我在VB.NET中有一个窗体,用作mainform中的对话框。它的实例总是本地定义的,没有字段。当用户单击对话框中的OK按钮时,它将触发一个事件,其中正好有一个参数,我的一个类的实例 由于它始终是一个局部变量,如何为该事件添加事件处理程序?我一直在寻找我自己,发现了一些东西,但我真的不明白 事件代码,在MyDialog中的一个字段: public Event ObjectCreated(ByRef newMyObject as MyObject) 主窗体调用对话框的代码:(不要介意语法) 如您

我在VB.NET中有一个窗体,用作mainform中的对话框。它的实例总是本地定义的,没有字段。当用户单击对话框中的OK按钮时,它将触发一个事件,其中正好有一个参数,我的一个类的实例

由于它始终是一个局部变量,如何为该事件添加事件处理程序?我一直在寻找我自己,发现了一些东西,但我真的不明白

事件代码,在MyDialog中的一个字段:

public Event ObjectCreated(ByRef newMyObject as MyObject)
主窗体调用对话框的代码:(不要介意语法)


如您所见,我一直在研究如何为我的事件添加处理程序。有人能帮我吗?最好使用最好的方法…

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

创建您自己的从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
此外,您可以使用
句柄
附加到从主窗体引发的事件(假定名称为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中的所有对象都是通过引用传递的。默认情况下,只有基本变量(string、int等)使用ByVal,并且可以设置为ByRef

Wow,这要简单得多。。。我真正缺少的是AdressOf关键字@我想你的问题包括“最好是用最好的方法……”。你为什么要取消我的答案?我马上意识到了这一点,所以我再次接受了你的答案,很抱歉给你带来困惑。
AddHandler ObjectCreated, AddressOf OnObjectCreated