如何在vb.net中创建可取消事件

如何在vb.net中创建可取消事件,vb.net,events,event-handling,Vb.net,Events,Event Handling,在VB.NET(不是c#)中 我想创建一个侦听器可以取消的事件。就像您可以取消winforms窗体的关闭事件一样,在这种情况下,窗体将不会关闭 我已经实现了一个来自EventArgs的派生类,该类具有可设置的Cancel属性,如下所示: Public Class AnnounceNavigateEventArgs Inherits EventArgs Private _cancel As Boolean = False ''' <summary>

在VB.NET(不是c#)中

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

我已经实现了一个来自EventArgs的派生类,该类具有可设置的Cancel属性,如下所示:

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
Public类宣布navigateeventargs
继承事件参数
Private _cancelas Boolean=False
''' 
''初始化AnnounceNavigateEventArgs类的新实例。
''' 
Public Sub New(ByRef cancel作为布尔值)
_取消
端接头
公共属性Cancel()为布尔值
得到
返回\u取消
结束
设置(ByVal值为布尔值)
_取消=值
端集
端属性
末级
请注意,我正在将cancel参数byRef传递给构造函数

我安装的侦听器正在将属性设置为Cancel=True。我认为ByRef意味着_cancel和cancel将指向堆栈上的同一位置,因此设置_cancel=true将使cancel=true。但这不是我的行为_cancel在setter中变为true,但我猜构造函数的参数仍然为false

在vb.net中执行此操作的正确方法是什么


Seth

您可以在.NET framework中重用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

无需从
CancelEventArgs
继承;您可以直接使用它。
作为CancelEventHandler发布公共事件