2009-08-28 10 views
5

in VB.NET (nicht C#) erstellen ...Wie Sie eine kündbare Veranstaltung in vb.net

Ich möchte ein Ereignis schaffen, als durch den Hörer abgebrochen werden kann. Genauso wie Sie den Abschluss eines Winforms-Formulars abbrechen können. In diesem Fall wird das Formular nicht geschlossen.

Ich habe bereits eine abgeleitete Klasse von EventArgs implementiert, die eine einstellbare Eigenschaft hat Abbrechen wie folgt:

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 

Beachten Sie, dass ich die byRef an den Konstruktor abbrechen Argument bin vorbei.

Der Listener, den ich eingerichtet habe, setzt die Eigenschaft auf Cancel = True. Ich dachte, ByRef meinte, dass sowohl _cancel als auch cancel auf die gleiche Stelle auf dem Stack zeigen würden und die Einstellung _cancel = true würde daher den Cancel = true machen. Aber das ist nicht das Verhalten, das ich bekomme. _cancel wird im Setter wahr, aber ich denke, das Argument für den Konstruktor bleibt falsch.

Was ist der richtige Weg, dies in vb.net zu tun?

Seth

Antwort

8

Sie können die System.ComponentModel.CancelEventArgs Klasse in dem .NET-Framework wiederverwenden.

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

Danke ... das hat es getan. Seth –

+1

Es ist nicht notwendig, von 'CancelEventArgs' zu übernehmen; Sie können es direkt verwenden. –

+0

'Öffentliches Ereignis, das als CancelEventHandler 'ankündigt –

Verwandte Themen