2009-08-28 12 views
5

w VB.NET (nie C#) ...Jak utworzyć cancelable zdarzenia w VB.NET

Chcę utworzyć wydarzenie, niż może zostać anulowane przez słuchacza. Podobnie jak możesz anulować zamknięcie zdarzenia formularza formularza wygranej, w którym to przypadku formularz nie zostanie zamknięty.

już wdrożone klasę pochodzącą z EventArgs, który ma właściwość Cancel ustawiane następująco:

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 

Zauważ, że jestem przechodzącej argumentu odwołania ByRef do konstruktora.

Ustawiony obiekt nasłuchujący ustawia właściwość Anuluj = Prawda. Myślałem, że ByRef oznaczało, że zarówno _cancel i cancel wskazują na to samo położenie na stosie, a ustawienie _cancel = true spowodowałoby, że cancel = true. Ale to nie jest zachowanie, które otrzymuję. _cancel staje się prawdą w seter, ale domyślam się, że argument konstruktora pozostaje fałszywy.

Jaki jest właściwy sposób na zrobienie tego w vb.net?

Seth

Odpowiedz

8

Możesz ponownie użyć klasy System.ComponentModel.CancelEventArgs w .NET Framework.

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

Dzięki ... to się udało. Seth –

+1

Nie ma potrzeby dziedziczenia z 'CancelEventArgs'; możesz go użyć bezpośrednio. –

+0

'Publiczne wydarzenie ogłoszeniowe jako AnulujEventHandler' –