Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何声明事件为强制事件_C#_.net_Events - Fatal编程技术网

C# 如何声明事件为强制事件

C# 如何声明事件为强制事件,c#,.net,events,C#,.net,Events,我有一个用户控件,它有一个contextmenustrip,每次右键单击都会显示。当用户在此菜单上选择一个项目时,我必须将此信息传递给父控件,以便它能够根据此信息做出反应 因此,我需要家长强制订阅此活动。有没有办法说出来 若并没有办法做到这一点,我应该抛出一个异常还是只检查事件处理程序的null值而不做任何事情 谢谢。在编译时无法强制执行此操作-这意味着.NET framework/C语言中没有任何东西可以在编译时执行静态检查,以确保在代码中实现此逻辑 在运行时,您可以执行必要的验证。例如,您可

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

因此,我需要家长强制订阅此活动。有没有办法说出来

若并没有办法做到这一点,我应该抛出一个异常还是只检查事件处理程序的null值而不做任何事情


谢谢。

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


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

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

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

但请注意:这在VisualStudio的表单设计器中不会很好地工作,因为表单设计器通常需要无参数的构造函数。相反,您需要从代码手动创建控件实例。

是一个很好的解决方法。这将意味着更多的家务活。