如何以编程方式启用\禁用ToolStripMenuItem中的嵌套子菜单项?

时间:2012-02-26 18:35:11

标签: c# winforms menuitem directory submenu

在我的Winforms应用程序中,我有一个带有嵌套子项的ToolStripMenuItem,其结构如下所示。

文件
。+ ...添加为.... + .....文件
............................文件夹
............................根文件夹

在“添加为”下,我希望能够以编程方式启用和禁用“文件”,“文件夹”和“根文件夹”。如何在代码中访问这些嵌套项?

我试过ToolStripMenuItem.DropDownItems [0] .Enabled = true \ false;但这会影响菜单hiearachy中的“添加为”及其下方的所有内容。

如果我在上面的代码中使用大于零的索引,则会出现'索引超出范围'错误。我如何实现此功能?

2 个答案:

答案 0 :(得分:7)

只需按自己的名字引用子项目,例如:

FileToolStripMenuItem.Enabled = false;
FolderToolStripMenuItem.Enabled = false;
RootFolderToolStripMenuItem.Enabled = false;

除非我遗漏了什么,否则这似乎是最简单的答案。

答案 1 :(得分:3)

正如汉斯在评论中暗示的那样,你引用了错误的DropDownItems集合。

使用索引执行此操作会很快变得难看。

引用父菜单并循环遍历“其”菜单集更简单:

private void toggleMenu_Click(object sender, EventArgs e) {
  foreach (ToolStripMenuItem toolItem in addAsToolStripMenuItem.DropDownItems) {
    toolItem.Enabled = !toolItem.Enabled;
  }
}

这是一个丑陋的方法,如果您稍后决定重新安排菜单结构,这将很难维护:

  foreach (ToolStripMenuItem toolItem in ((ToolStripMenuItem)((ToolStripMenuItem)menuStrip1.Items[0]).DropDownItems[0]).DropDownItems) {
    toolItem.Enabled = !toolItem.Enabled;
  }