我在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?
正如您所看到的,我坚持如何为我的活动添加处理程序。谁能帮我?最好的办法是......
答案 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