2009-08-28 18 views
5

en VB.NET (no C#) ...¿Cómo se crea un evento cancelable en vb.net

Quiero crear un evento que puede ser cancelado por el oyente. Al igual que puede cancelar el evento de cierre de un formulario de winforms en cuyo caso el formulario no se cerrará.

que ya han implementado una clase derivada de EventArgs que tiene un ajustable Cancelar propiedad como sigue:

Public Class AnnounceNavigateEventArgs 
    Inherits EventArgs 

    Private _cancel As Boolean = False 

    ''' <summary> 
    ''' Initializes a new instance of the AnnounceNavigateEventArgs class. 
    ''' </summary> 
    Public Sub New(ByRef cancel As Boolean) 
     _cancel = cancel 
    End Sub 
    Public Property Cancel() As Boolean 
     Get 
      Return _cancel 
     End Get 
     Set(ByVal value As Boolean) 
      _cancel = value 
     End Set 
    End Property 

End Class 

en cuenta que estoy pasando el argumento cancelar byRef al constructor.

El detector que tengo configurado establece la propiedad en Cancelar = Verdadero. Pensé que ByRef significaba que tanto _cancel como cancel apuntarían a la misma ubicación en la pila y que la configuración _cancel = true haría por lo tanto cancel = true. Pero este no es el comportamiento que estoy obteniendo. _cancel se convierte en verdadero en el colocador, pero supongo que el argumento para el constructor sigue siendo falso.

¿Cuál es la forma correcta de hacerlo en vb.net?

Seth

Respuesta

8

puede volver a utilizar la clase System.ComponentModel.CancelEventArgs en el marco .NET.

Public Event Announcing As EventHandler(Of AnnounceNavigateEventArgs) 

Protected Sub OnAnnounce() 
    Dim e As New AnnounceNavigateEventArgs 

    RaiseEvent Announcing(Me, e) 

    If Not e.Cancel Then 
     ' announce 
    End If 
End Sub 

Public Class AnnounceNavigateEventArgs 
    Inherits System.ComponentModel.CancelEventArgs 
End Class 
+1

Gracias ... eso lo hizo. Seth –

+1

No hay necesidad de heredar de 'CancelEventArgs'; puedes usarlo directamente –

+0

'Anuncio de evento público como CancelEventHandler' –

Cuestiones relacionadas