2009-08-28 23 views
5

VB.NET(not c#)...VB.netでキャンセル可能なイベントを作成する方法

リスナーがキャンセルできるイベントを作成したいと思います。 winformsフォームの終了イベントを取り消すことができるのと同じように、フォームは終了しません。私は、コンストラクタにByRefのキャンセル引数を渡すのです

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 

お知らせ:

は、私はすでに次のように設定可能なプロパティをキャンセルしているのEventArgsから派生したクラスを実装しています。

私が設定したリスナーは、プロパティをCancel = Trueに設定しています。私は、ByRefが_cancelとcancelの両方がスタック上の同じ場所を指し、_cancel = trueを設定するとcancel = trueになることを意味すると考えました。しかし、これは私が得ている行動ではありません。 _cancelはsetterでtrueになりますが、コンストラクタへの引数はfalseのままです。

vb.netでこれを行う適切な方法は何ですか?

セスは

答えて

8

あなたは、.NETフレームワークでSystem.ComponentModel.CancelEventArgsクラスを再利用することができます。

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

ありがとうございました。 Seth –

+1

'CancelEventArgs'から継承する必要はありません。あなたはそれを直接使うことができます。 –

+0

'PublicEvent Announcing As As CancelEventHandler' –

関連する問題