要使用自定義事件冒泡另一個控件的事件,你可以這樣做:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler _theButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler _theButton.Click, value
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
' no need to do anything in here since you will actually '
' not raise this event; it only acts as a "placeholder" for the '
' buttons click event '
End RaiseEvent
End Event
在AddHandler
和RemoveHandler
你只是傳播的通話將附加或刪除指定事件處理程序到/從控件的Click
事件。
爲了擴大對使用自定義事件了一下,這裏是一個自定義事件的另一個樣本實施:
Dim _handlers As New List(Of EventHandler)
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
_handlers.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
If _handlers.Contains(value) Then
_handlers.Remove(value)
End If
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
For Each handler As EventHandler In _handlers
Try
handler.Invoke(sender, e)
Catch ex As Exception
Debug.WriteLine("Exception while invoking event handler: " & ex.ToString())
End Try
Next
End RaiseEvent
End Event
現在,因爲它看起來上面,它比普通的事件聲明沒有別的:
Public Event AddRemoveAttendees As EventHandler
它提供了一個類似的機制,允許附加和刪除事件處理程序,並提供事件。 Custom事件添加的是額外的控制級別;你可以在添加,刪除和提高事件的過程中編寫一些代碼,在這些代碼中你可以執行規則,並且稍微調整一下會發生什麼。例如,您可能想要限制附加到事件的事件處理程序的數量。爲了實現這一目標,你可以從上面的示例改變AddHandler
部分:
AddHandler(ByVal value As EventHandler)
If _handlers.Count < 8 Then
_handlers.Add(value)
End If
End AddHandler
如果您不需要那種細緻的控制,我認爲沒有必要宣佈自定義事件。
謝謝您的回答......我給了回答fi的標誌第一篇文章是因爲它的徹底性,但是提高了你的答案。 我決定換行內控制標準委託和事件的控制,使用戶控件將發出的事件,而不是chilc控制......根據你的建議。謝謝。 Seth – 2009-07-05 04:41:23