我正在开发一个MDI Windows Forms应用程序。我的父窗体有ToolStrip菜单和一些ToolStripDropDownButtons。我想根据用户的权限相应地更改ToolStripDropDownButton的Visible属性或更改为它拥有的一些ToolStripItems (子按钮)。
下面是我用来管理这个的方法的一部分:
private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item)
{
mainBtn.Visible = false;
foreach (ToolStripItem tempItem in item)
{
tempItem.Visible = true;
}
}我将ToolStripDropDownButton和所有其他“子按钮”作为参数列表作为第一个参数进行传递。但是,当我在部件可见中进入调试模式时,tempItem foreach (ToolStripItem tempItem in item)属性被标记为false。但是,在设计器中,此属性设置为true。您可以看到,我甚至尝试显式地将值更改为true - tempItem.Visible = true;,但似乎此行什么也没做。Visible的值仍然是false,我不能更改它。
这只是该方法的开始,我想不出其他代码会搞乱ToolStrip项目。我试图将mainBtn.Visible的值更改为true或false,认为可能存在任何联系,但似乎这不是问题所在。所以,你知道为什么会发生这种情况吗,为什么我不能改变Visible的值,当然还有任何方法。
发布于 2013-04-01 19:22:51
解决方案很简单,但并不明显。当我们必须使用ToolStripItems (它是ToolSTripDropDownButton的一部分)来解决可见性问题时,我们必须使用Available属性。它就是为这个目的而设计的。希望有人通过阅读这篇文章,花更少的时间来处理这个问题!
发布于 2013-03-28 22:02:10
以下代码将遍历menuStrip1中的所有toolstripitems
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。
https://stackoverflow.com/questions/15683820
复制相似问题