如何声明事件是强制性的

时间:2013-02-25 16:11:38

标签: c# .net events

我有一个用户控件,每次右键单击都会显示一个contextmenustrip。当用户在此菜单上选择一个项目时,我必须将此信息传递给父控件,以便它可以根据这个做出反应。

所以我需要父母强​​制订阅这个事件。有办法说出来吗?

如果没有办法做到这一点,我应该抛出一个异常还是只检查(值为事件处理程序)的空值而什么都不做?

感谢。

2 个答案:

答案 0 :(得分:3)

在编译时无法强制执行此操作 - 这意味着.NET framework / C#语言中没有任何内容可以在编译时执行静态检查,以确保在您的代码中实现此逻辑。

在运行时,您可以执行必要的验证。例如,您可以检查委托的调用列表,以确保父级位于该列表中。

答案 1 :(得分:2)

您可以为用户控件创建一个特定的构造函数,以防止实例化,除非给出了事件处理程序,如下所示。

public partial class MyUserControl : UserControl {
    public MyUserControl (ToolStripItemClickedEventHandler handler) {
        InitializeComponent ();
        myContextMenuStrip.ItemClicked += handler;
    }
}

请注意:这对于Visual Studio的表单设计器来说效果不佳,因为表单设计者通常需要无参数构造函数。相反,您需要从代码手动创建控件实例。