我有一个用户控件,它具有在每次右键单击时显示的上下文菜单条。当用户在此菜单上选择一个项目时,我必须将此信息传递给父控件,以便它可以根据此做出反应。
所以我需要家长强制订阅这个事件。有没有办法说出来?
如果没有办法做到这一点,我应该抛出异常还是只检查(事件处理程序的)空值并且什么都不做?
谢谢。
无法在编译时强制执行此操作 - 这意味着 .NET 框架/C# 语言中没有任何内容可以在编译时执行静态检查以确保在您的代码中实现此逻辑。
在运行时,您可以执行必要的验证。例如,您可以检查委托的调用列表以确保父级在该列表中。
您可以为您的用户控件创建一个特定的构造函数,以防止实例化,除非给出事件处理程序,像这样。
public partial class MyUserControl : UserControl {
public MyUserControl (ToolStripItemClickedEventHandler handler) {
InitializeComponent ();
myContextMenuStrip.ItemClicked += handler;
}
}
但请注意:这不适用于 Visual Studio 的表单设计器,因为表单设计器通常需要无参数的构造函数。相反,您需要从代码手动创建控件实例。