2009-08-28 12 views
5

in VB.NET (non C#) ...Come si crea un evento annullabile in vb.net

voglio creare un evento che può essere annullato da chi ascolta. Proprio come è possibile annullare l'evento di chiusura di un modulo Winforms, nel qual caso il modulo non verrà chiuso.

mi hanno già attuato una classe derivata da EventArgs che ha un impostabile Annulla proprietà come segue:

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 

Si noti che sto passando l'argomento Cancel ByRef al costruttore.

Il listener che ho impostato sta impostando la proprietà su Cancel = True. Pensavo che ByRef significasse che sia _cancel che cancel avrebbero puntato alla stessa posizione nello stack e che l'impostazione _cancel = true avrebbe quindi reso cancel = true. Ma questo non è il comportamento che sto ottenendo. _cancel diventa vero nel setter ma suppongo che l'argomento del costruttore resti falso.

Qual è il modo corretto di farlo in vb.net?

Seth

risposta

8

È possibile riutilizzare la classe System.ComponentModel.CancelEventArgs nel framework .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

Grazie ... l'ha fatto. Seth –

+1

Non è necessario ereditare da "CancelEventArgs'; puoi usarlo direttamente –

+0

'Evento pubblico annunciante come CancelEventHandler' –