2009-08-28 7 views
5

IN VB.NET (non C#) ...Comment créer un événement annulable dans vb.net

Je veux créer un événement que peut être annulé par l'auditeur. Tout comme vous pouvez annuler l'événement de clôture d'un formulaire winforms, auquel cas le formulaire ne se fermera pas.

J'ai déjà mis en place une classe dérivée de EventArgs qui a une propriété Cancel comme réglable suit:

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 

Notez que je passe l'argument annuler BYREF au constructeur.

L'écouteur que j'ai configuré définit la propriété sur Cancel = True. Je pensais que ByRef signifiait que _cancel et cancel allaient pointer vers le même emplacement sur la pile et que le paramètre _cancel = true rendrait donc cancel = true. Mais ce n'est pas le comportement que je reçois. _cancel devient vrai dans le setter mais je suppose que l'argument du constructeur reste faux.

Quelle est la bonne façon de le faire dans vb.net?

Seth

Répondre

8

Vous pouvez réutiliser la classe System.ComponentModel.CancelEventArgs dans le 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

Merci ... qui l'a fait. Seth –

+1

Il n'est pas nécessaire d'hériter de 'CancelEventArgs'; vous pouvez l'utiliser directement. –

+0

'Événement public annonçant comme CancelEventHandler' –

Questions connexes