2012-08-03 71 views
0

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

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

我只是不确定如何防止事件发生两次一次为控件内的代码在事件中的其他事件。如果有人能指出我在这将是非常有益的正确方向

-Nathan

+0

不要为自己的事件编写事件处理程序。您的控件应*只*具有RaiseEvent语句来提升事件。 – 2012-08-03 19:27:25

+0

谢谢,我不能相信我没有想过使用引发事件的方法,然后检查它是否处理,以查看它是否应该通过默认操作进行。谢谢您的帮助 – Risryn 2012-08-03 20:13:34

回答

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 
0

在你的控制:

Public Event MenuShow As EventHandler 



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

现在消费者可能会覆盖OnMenuShow这将绕过你的RaiseEvent语句,而不需要你去“检查”任何东西。