【问题标题】:Allowing Users to Handle an event in place of a default event允许用户处理事件代替默认事件
【发布时间】:2012-08-03 19:24:38
【问题描述】:

我正在构建一个自定义控件,我想做的是有一个事件让我们将此事件称为 OnMenuShow。现在我想做的是在我的控件中处理此事件以显示一个菜单,但允许实现我的自定义控件的用户在父窗体中处理事件以显示不同的菜单(如果他们愿意)。所以用户代码看起来像这样。

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

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

-内森

【问题讨论】:

  • 不要为自己的事件编写事件处理程序。您的控件应该有一个 RaiseEvent 语句来引发事件。
  • 谢谢,我不敢相信我没有想到使用引发事件的方法,然后检查它是否已处理以查看它是否应该使用默认操作。感谢您的帮助

标签: vb.net custom-events


【解决方案1】:

在您的控制之下:

Public Event MenuShow As EventHandler



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

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

【讨论】:

    【解决方案2】:

    我发现 Hans 的回答最适合我的问题,如果他将其留在答案中,我会将其标记为已回答。我将留下我最终编码的方式以供将来参考。

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-17
      • 2011-08-12
      • 2016-01-16
      • 2011-10-08
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多