代码之家  ›  专栏  ›  技术社区  ›  Seth Spearman

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

  •  5
  • Seth Spearman  · 技术社区  · 16 年前

    在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
    

    请注意,我正在将cancel参数byref传递给构造函数。

    我安装的侦听器正在将属性设置为cancel=true。我认为byref意味着“取消”和“取消”都将指向堆栈上的相同位置,因此设置“取消”为“真”将使“取消”为“真”。但这不是我的行为。_在setter中,cancel变为true,但我猜构造函数的参数仍然为false。

    在vb.net中,正确的方法是什么?

    塞思

    1 回复  |  直到 16 年前
        1
  •  8
  •   Fnop    16 年前

    可以在.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
    
    推荐文章