2009-08-28 2 views
5

에있는 취소 가능한 이벤트를 만드는 방법 ...VB.net에서 취소 가능한 이벤트를 만드는 방법 VB.net에서

리스너가 취소 할 수있는 이벤트를 만들고 싶습니다. winforms 양식의 closing 이벤트를 취소 할 수있는 것처럼 양식이 닫히지 않습니다.

는 이미 다음과 같이 설정 가능한 재산을 취소 가지고있는 EventArgs에서 파생 클래스를 구현 한 : 나는 생성자에하는 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 

알 수 있습니다.

청취자는 속성을 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

'Public Event Announcing As CancelEventHandler' –