2009-08-28 27 views
5

Ở VB.NET (không phải C#) ...Làm cách nào để bạn tạo sự kiện có thể hủy trong vb.net

Tôi muốn tạo sự kiện hơn người có thể hủy. Cũng giống như bạn có thể hủy sự kiện đóng của biểu mẫu winforms trong trường hợp đó biểu mẫu sẽ không đóng.

tôi đã thực hiện một lớp dẫn xuất từ ​​EventArgs mà có một settable Hủy bỏ tài sản như sau:

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 

Chú ý rằng tôi đang đi qua các lập luận hủy ByRef để các nhà xây dựng.

Trình nghe tôi đã thiết lập được đặt thuộc tính thành Hủy = Đúng. Tôi nghĩ ByRef có nghĩa là cả hai _cancel và hủy bỏ sẽ trỏ đến cùng một vị trí trên ngăn xếp và thiết lập đó _cancel = true do đó sẽ làm cho hủy = true. Nhưng đây không phải là hành vi mà tôi đang nhận được. _cancel trở thành true trong setter nhưng tôi đoán đối số cho hàm tạo vẫn sai.

Cách thích hợp để thực hiện việc này trong vb.net là gì?

Seth

Trả lời

8

Bạn có thể sử dụng lại lớp System.ComponentModel.CancelEventArgs trong khung .NET.

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

Cảm ơn ... điều đó đã xảy ra. Seth –

+1

Không cần phải kế thừa từ 'CancelEventArgs'; bạn có thể sử dụng nó trực tiếp. –

+0

'Thông báo sự kiện công khai dưới dạng CancelEventHandler' –

Các vấn đề liên quan