在我的Winforms应用程序中,我有一个带有嵌套子项的ToolStripMenuItem,其结构如下所示。
文件
。+ ...添加为.... + .....文件
............................文件夹
............................根文件夹
在“添加为”下,我希望能够以编程方式启用和禁用“文件”,“文件夹”和“根文件夹”。如何在代码中访问这些嵌套项?
我试过ToolStripMenuItem.DropDownItems [0] .Enabled = true \ false;但这会影响菜单hiearachy中的“添加为”及其下方的所有内容。
如果我在上面的代码中使用大于零的索引,则会出现'索引超出范围'错误。我如何实现此功能?
答案 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;
}