Windows窗体 - ToolStripItem可见属性始终设置为false

时间:2013-03-28 13:58:46

标签: c# winforms toolstripdropdown

我正在处理MDI Windows Forms申请。我的父表单包含ToolStrip菜单和一些ToolStripDropDownButtons。我想根据用户的权限更改VisibleToolStripDropDownButton(子按钮)的某些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值,当然还有任何方法可以做到这一点。

2 个答案:

答案 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