从子控件访问父控件的元素的最佳方法是什么?

我有一个父控件(主窗体)和一个子控件(用户控件).子控件具有一些代码,这些代码确定应用程序可以执行哪些功能(例如,保存文件,写入日志等).我需要根据功能显示/隐藏,启用/禁用主窗体的主菜单项.因为我不能只写MainMenu.MenuItem1.Visible = false; (从子控件看不到主菜单),我在子控件中触发一个事件并在主窗体上处理此事件.问题是我需要通过菜单中哪些元素需要显示/隐藏.为此,我创建了一个枚举,显示了如何处理该项目

public enum ItemMode
{
    TRUE, FALSE, NONE
}

然后,我创建了具有6个ItemMode类型参数的eventargs(我需要管理6个菜单项).所以任何时候我需要显示第一个项目,隐藏第二个项目,而对其余的项目什么都不做,我必须写这样的东西

e = new ItemModeEventArgs(ItemMode.TRUE, ItemMode.FALSE, ItemMode.NONE, ItemMode.NONE, ItemMode.NONE, ItemMode.NONE);
FireMyEvent(e);

对我来说,这似乎是太多代码,而且,如果将来我需要管理10个项目,该怎么办?然后,我将不得不重写所有构造函数,以添加另外4个NONE.

我相信有一个更好的方法可以做到这一点,但我只是想不通它是什么.

解决方法:

您可以创建一个采用ItemMode []或List< ItemMode>或Dictionary< string,ItemMode>对于这些项目(而不是当前的6个参数)-这样,您在添加更多项目时就无需进行太多更改…

上一篇:C#-自定义用户控件中的“覆盖字体”属性未显示在设计器文件中


下一篇:如何使用C#将转义符放在特殊字符之前?