Event Handled in Certain Order & Supressing Events

vendiddy

Well-known member
Joined
May 14, 2006
Messages
64
Programming Experience
1-3
I have two questions about events.

(1) Suppose I have 3 methods, A(), B(), and C(), that handle an event. How can I make sure that they are handled in order (A, B, C)? If I call the AddHandler method on these methods in a certain order, will they respond to the event in the same order I 'subscribed' them to the event?

(2) Is there a way to suppress an event, i.e., prevent it from being passed up the event chain?

Thanks. :)
 
Last edited:
1. They are handled/invoked in the order they were added.
2. You can create a Custom Event and use CancelEventArgs to enable each handler to cancel the rest of the handler list, example:
VB.NET:
Private Sub frmDiv_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    AddHandler Me.ev, AddressOf eva
    AddHandler Me.ev, AddressOf evb
    AddHandler Me.ev, AddressOf evc
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    RaiseEvent ev(Nothing, New System.ComponentModel.CancelEventArgs)
End Sub

Private del As EventHandler
Delegate Sub EventHandler(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)

Custom Event ev As EventHandler
    AddHandler(ByVal value As EventHandler)
        del = System.Delegate.Combine(del, value)
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
        del = System.Delegate.Remove(del, value)
    End RemoveHandler
    RaiseEvent(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
        If Not del Is Nothing Then
            For Each d As EventHandler In del.GetInvocationList
                d.Invoke(sender, e)
                If e.Cancel Then Exit For
            Next
        End If
    End RaiseEvent
End Event

Private Sub eva(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
    Debug.Write("A")
    e.Cancel = CheckBox1.Checked
End Sub

Private Sub evb(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
    Debug.Write("B")
End Sub

Private Sub evc(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
    Debug.Write("C")
End Sub
Button3 raises the event, CheckBox1 if checked cancels the other handlers after A. Each event will write either "ABC" or just "A" in the Immediate window.
 
Back
Top