2009-08-28 84 views
5

IN VB.NET(not c#)...如何在vb.net中创建一个可取消事件

我想创建一个可以被侦听器取消的事件。就像你可以取消winforms表单的关闭事件一样,在这种情况下表单不会关闭。

我已经从具有一个可设置取消属性如下EventArgs的实现派生类:

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参数按地址给构造函数。

我设置的监听器将属性设置为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 – 2009-08-29 17:33:59

+1

没有必要继承'CancelEventArgs';你可以直接使用它。 – 2013-11-10 11:30:36

+0

'公布事件为CancelEventHandler' – 2013-11-10 11:51:00