我正在处理MDI Windows Forms
申请。我的父表单包含ToolStrip
菜单和一些ToolStripDropDownButtons
。我想根据用户的权限更改Visible
或ToolStripDropDownButton
(子按钮)的某些ToolStripItems
属性。
以下是我编写的用于管理此方法的方法部分:
private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item)
{
mainBtn.Visible = false;
foreach (ToolStripItem tempItem in item)
{
tempItem.Visible = true;
}
}
我作为第一个参数传递ToolStripDropDownButton
和所有其他“子按钮”作为参数列表。但是,当我在部件foreach (ToolStripItem tempItem in item)
中进入调试模式时,tempItem
Visible属性被标记为false。但是在设计器中,此属性设置为true。您可以看到我甚至尝试明确地将值更改为true - tempItem.Visible = true;
,但似乎此行无效。 Visible
的值仍为false
,我无法更改它。
这只是该方法的开头,我无法想到其他代码可能会弄乱ToolStrip
项。我试图将mainBtn.Visible
的值更改为true或false,认为可能存在任何连接,但似乎这不是问题。所以任何想法为什么会这样,为什么我不能改变Visible
值,当然还有任何方法可以做到这一点。
答案 0 :(得分:19)
解决方案很简单,但并不明显。当我们必须使用属于ToolStripItems
的{{1}}并解决可见性问题时,我们必须使用普通按钮来解决它,我们必须使用ToolSTripDropDownButton
属性。它专为此目的而设计。希望有人通过阅读本书来减少处理这个问题的时间!
答案 1 :(得分:1)
以下内容将浏览toolstripitems
中的所有menuStrip1
:
List<ToolStripMenuItem> allItems = new List<ToolStripMenuItem>();
foreach (ToolStripMenuItem toolItem in menuStrip1.Items)
{
allItems.Add(toolItem);
//add sub items
allItems.AddRange(GetItems(toolItem));
}
foreach (ToolStripMenuItem item in allItems)
{
//make your toolstripMenuItem invisible or whatever you want to do with it.
}
allItems.Clear();
将menuStrip1
更改为您所谓的toolstrip
。