请阅读此文章。 我有同样的问题,因为在这个职位描述,但我试图做在VB.net而不是C#。
我敢肯定,要做到这一点我必须使用自定义事件。 (我用一个编码转换的网站去了解自定义事件。)所以在IDE当我键入以下内容:
公共自定义事件AddRemoveAttendees作为事件处理
它扩展到下面的代码片段。
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
End RaiseEvent
End Event
但我无法弄清楚如何处理它。 直到今天,我从来没有听说过的自定义事件。
我想要的东西的底线是有一个按钮泡沫的单击事件由用户控制的容器中。 我知道我可以总结我自己的事件,但我至少想了解自定义事件我走的更远这条道路之前。
赛斯
要使用自定义事件冒泡另一个控件的事件,你可以这样做:
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
它提供了一个类似的机制,允许事件处理程序的附接和移除,并且用于待引发的事件。 什么是自定义事件增加是控制的一个额外的水平; 你写周围的一些代码的添加,移除和引发事件,您可以在其中执行规则,并调整会发生什么一点点。 例如,您可能希望限制连接到您的事件的事件处理程序的数量。 为了实现这一目标,你可以改变AddHandler
从上面的示例部分:
AddHandler(ByVal value As EventHandler)
If _handlers.Count < 8 Then
_handlers.Add(value)
End If
End AddHandler
如果你不需要那种细致的控制,我认为没有必要宣布自定义事件。
如果你想同样的事情在其他岗位你mentionned,这里的VB.NET相当于:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler SaveButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler SaveButton.Click, value
End RemoveHandler
End Event
但我不认为这是一个好主意,因为sender
上述事件的参数将是Button
,不是你的UserControl
...
相反,你可以订阅Button.Click事件,并提高你自己的事件(没有明确的存取)