我的菜单条如下所示。
在加载时间,我想使enable和visible属性为true。
下面是我的代码,但是没有在打印选项下使用预览和打印选项。
foreach (ToolStripMenuItem i in menuStrip.Items)
{
for (int x = 0; x <= i.DropDownItems.Count-1; x++)
{
i.DropDownItems[x].Visible = true;
i.DropDownItems[x].Enabled = true;
}
i.Available = true;
i.Visible = true;
i.Enabled = true;
}
答案 0 :(得分:2)
我建议使用一些扩展方法:
MenuStrip
,ToolStrip
或ContextMenuStrip
或StatusStrip
的所有后代(孩子,孩子的孩子……)后代扩展方法
以下扩展方法适用于MenuStrip
,ToolStrip
,ContextMenuStrip
或StatusStrip
:
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
public static class ToolStripExtensions
{
public static IEnumerable<ToolStripItem> Descendants(this ToolStrip toolStrip)
{
return toolStrip.Items.Flatten();
}
public static IEnumerable<ToolStripItem> Descendants(this ToolStripDropDownItem item)
{
return item.DropDownItems.Flatten();
}
public static IEnumerable<ToolStripItem> DescendantsAndSelf (this ToolStripDropDownItem item)
{
return (new[] { item }).Concat(item.DropDownItems.Flatten());
}
private static IEnumerable<ToolStripItem> Flatten(this ToolStripItemCollection items)
{
foreach (ToolStripItem i in items)
{
yield return i;
if (i is ToolStripDropDownItem)
foreach (ToolStripItem s in ((ToolStripDropDownItem)i).DropDownItems.Flatten())
yield return s;
}
}
}
示例
禁用特定项目的所有后代:
fileToolStripMenuItem.Descendants().ToList()
.ForEach(x => {
x.Enabled = false;
});
禁用菜单栏的所有后代:
menuStrip1.Descendants().ToList()
.ForEach(x => {
x.Enabled = false;
});