3

我正在开发一个在过去几年中由各种程序员编辑的应用程序,我偶然发现了使用字符串文字访问 MenuItems 的问题。

例如:在很多地方都有类似的代码

mainMenu.MenuItems[1].MenuItems[0].Visible=true;

或者

mainMenu.MenuItems["View"].MenuItems["FullScreen"].Visible=true;
  1. 如何更改用于识别 MenuItem 的字符串并捕获它用于访问的所有位置?菜单和菜单项被声明为公共的,并在整个大型应用程序中使用

  2. 什么是正确的方法阻止使用这些魔术索引。我预见到每次添加新项目或更改名称时都会出现问题。

PS 我已经开始使用枚举字典方法,其中每个 menuItem 都与一个键配对。但这仍然不会强迫其他开发人员使用我的实现,也不是问题 2 的最优雅的解决方案

4

2 回答 2

9

在 WinForms 设计器中为每个菜单项命名(我假设),然后通过该名称引用它。

在此处输入图像描述

然后只需在您的代码中使用它:

menuExit.Visible = false;

如果以编程方式添加菜单项,请执行以下操作:

class MyForm : Form
{
    private MenuItem menuExit;

    ...

        myMenu.Items.Add(menuExit = new MenuItem(...));

    ...
}

然后仍然通过menuExit名称访问它。避免幻数和字符串的关键是直接引用您想要引用的任何内容。作为奖励,您现在可以使用 F2 安全地重命名此变量。

于 2012-06-19T11:25:11.330 回答
0

Romkyns answer is the correct one for this scenarion however if you do need to use string literals in your code I would alwasy keep them in public static classes such as:

public static class Constants
{
    public static class Menu 
    {
        public static readonly string FirstMenuName = "Menu 1";
        ...
    }

    public static class OtherCateogry
    {
        ...
    }
}

You can then access them by Constants.Menu.FirstMenuName.

As for definitively preventing other devs from using literals throughout code - you might have to make recourse to the Rod of Correction (sturdy metal ruler) ;).

于 2012-06-19T12:59:50.277 回答