2012-04-25 16 views
5

Tengo un formulario en VB.NET que se usa como un diálogo en un formulario principal. Sus instancias siempre se definen localmente, no hay campo para ello. Cuando el usuario hace clic en el botón Aceptar en el cuadro de diálogo, activará un evento con exactamente un argumento, una instancia de una de mis clases.Cómo agregar el controlador de eventos a la variable local en VB.NET

Dado que siempre es una variable local, ¿cómo puedo agregar un controlador de eventos para ese evento? He buscado para mí y encontré algo, pero en realidad no puedo averiguarlo ...

Código para el evento, un campo en MyDialog:

public Event ObjectCreated(ByRef newMyObject as MyObject) 

Código para el formulario principal para llamar de diálogo : (no importa la sintaxis)

Dim dialog As New MyDialog() 
dialog.ShowDialog(Me) 
AddHandler ObjectCreated, (what do I put here?) //Or how do I add a handler? 

Como se puede ver que estoy atascado sobre cómo agregar un controlador para mi evento. ¿Alguien puede ayudarme? Preferiblemente con la mejor manera de hacerlo ...

Respuesta

6

Se recomienda, por coherencia, que use el mismo modelo de origen y evento args como todos los controladores de eventos del sistema.

crear su propia clase que hereda de EventArgs, como:

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

Entonces declarar su evento, y un método de control, como:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) 
    ' Handler code here 
End Sub 

A continuación, conecte el controlador a su evento usando:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

Además, puede utilizar el Handles para conectarlo al ev ent levantado de su formulario principal (asumiendo el nombre MainForm), de la siguiente manera:

Private Sub MainForm_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) Handles MainForm.ObjectCreated 
    ' Handler code here 
End Sub 
+0

nítidas, gracias. – MarioDS

+0

@MarioDeSchaepmeester Pensé que su pregunta incluía "Preferiblemente con la mejor manera de hacerlo ...". ¿Por qué anularías mi respuesta? –

+0

Bueno, de inmediato me di cuenta de eso, así que acepté el tuyo nuevamente, disculpe la confusión. – MarioDS

1

tiene que escribir la subrutina que realmente se ejecuta cuando se genera el evento:

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

A continuación se añade el manejador :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

Como nota al margen, ByRef no hace nada aquí. Todos los objetos en VB se pasan por referencia. Solo las variables primitave (cadena, int, etc.) usan ByVal por defecto y pueden configurarse como ByRef

+0

Guau, eso es mucho más simple ... ¡Lo único que me faltaba en realidad era la palabra clave AdressOf! – MarioDS

Cuestiones relacionadas