Как создать отменяемое событие в vb.net? - PullRequest
5 голосов
/ 28 августа 2009

В 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

Обратите внимание, что я передаю аргумент отмены byRef в конструктор.

Установленный мной слушатель устанавливает для свойства значение Cancel = True. Я подумал, что ByRef означает, что и _cancel, и cancel указывают на одно и то же место в стеке, и поэтому установка _cancel = true, таким образом, сделает cancel = true. Но это не то поведение, которое я получаю. _cancel становится истинным в установщике, но я предполагаю, что аргумент конструктора остается ложным.

Как правильно сделать это в vb.net?

Сет

1 Ответ

8 голосов
/ 28 августа 2009

Вы можете повторно использовать класс System.ComponentModel.CancelEventArgs в .NET Framework.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...