允许用户处理事件以代替默认事件

时间:2012-08-03 19:24:38

标签: vb.net custom-events

我正在构建一个自定义控件,我想要做的是让事件调用此事件OnMenuShow。现在我想要做的是在我的控件中处理此事件以显示一个菜单,但允许用户实现我的自定义控件来处理父窗体内的事件,以便在需要时显示不同的菜单。所以用户代码看起来像这样。

    Public Sub Control_OnMenuShow(sender as Object, e as CustomEventArgs) handles Control.OnMenyShow
      'DO some work
       e.handled = true
    end Sub

我只是不确定如何防止事件在控件内部的代码中触发一次事件。如果有人能指出我的方向非常有帮助

-Nathan

2 个答案:

答案 0 :(得分:0)

在你的控制中:

Public Event MenuShow As EventHandler



Public Overridable Sub OnMenuShow()
  RaiseEvent MenuShow(New EventArgs)
End Sub

现在,消费者可能会覆盖OnMenuShow,它会绕过您的raiseevent语句,而无需“检查”任何内容。

答案 1 :(得分:0)

我发现汉斯'答案回应最适合我的问题,如果他把它留在答案中我会标记他的答案。我将离开我最终编码的方式以备将来参考。

Public Event MenuShow As EventHandler(Of  MenuShowEventArgs)

Public Overridable Sub OnMenuShowEvent()
    Dim args As New MenuShowEventArgs(False, "Control")
    RaiseEvent MenuShow(Me, args)
    if args.handled then return
    'DO WORK
End Sub