我正在研究过去几年由各种程序员编辑过的应用程序,我偶然发现了使用String Literals访问MenuItems的问题。
例如:在很多地方都有像
这样的代码mainMenu.MenuItems[1].MenuItems[0].Visible=true;
或
mainMenu.MenuItems["View"].MenuItems["FullScreen"].Visible=true;
如何更改用于标识MenuItem的字符串并捕获它用于访问的所有位置?菜单和菜单项被声明为公共,并在整个大型应用程序中使用
什么是阻止使用这些魔术索引的正确方法。每当添加新项目或更改名称时,我都认为有些事情会被破坏。
P.S。我已经开始使用枚举字典方法,其中每个menuItem都与一个键配对。但这仍然不会强迫其他开发人员使用我的实现,也不是问题2的最优雅的解决方案
答案 0 :(得分:9)
在WinForms设计器中给每个菜单项命名(我假设),然后用该名称引用它。
然后在代码中使用它:
menuExit.Visible = false;
如果以编程方式添加菜单项,请执行以下操作:
class MyForm : Form
{
private MenuItem menuExit;
...
myMenu.Items.Add(menuExit = new MenuItem(...));
...
}
然后仍以menuExit
名称访问它。避免幻数和字符串的关键是直接引用你想要引用的内容。作为奖励,您现在可以使用F2安全地重命名此可修复程序。
答案 1 :(得分:0)
Romkyns的回答是这个版本的正确答案,但是如果您确实需要在代码中使用字符串文字,我会将它们保存在公共静态类中,例如:
public static class Constants
{
public static class Menu
{
public static readonly string FirstMenuName = "Menu 1";
...
}
public static class OtherCateogry
{
...
}
}
然后,您可以Constants.Menu.FirstMenuName
访问它们。
至于最终阻止其他开发人员在整个代码中使用文字 - 你可能不得不求助于纠正之棒(坚固的金属尺);)。