我有一个父控件(主窗体)和一个子控件(用户控件)。子控件具有一些代码,这些代码确定应用程序可以执行哪些功能(例如,保存文件,写入日志等)。我需要根据功能显示/隐藏,启用/禁用主窗体的主菜单项。因为我不能只写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。

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

最佳答案

您可以创建一个EventArgs来为这些项目添加一个ItemMode[]List<ItemMode>Dictionary<string, ItemMode>(而不是当前的6个参数)-这样,您在添加更多项目时无需进行太多更改。 ..

10-04 19:01