8

我正在开发一个MDI Windows Forms应用程序。我的父表单有ToolStripmenu 和一些ToolStripDropDownButtons. 我想根据用户的许可Visible将 or 的属性更改为它具有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)但是,当我在部分中进入调试模式时,tempItemVisible 属性被标记为 false。然而,在设计器中,此属性设置为 true。您可以看到我什至尝试明确地将值更改为 true -tempItem.Visible = true;但似乎这条线什么也没做。Visible留下的价值,false我无法改变。

这只是方法的开始,我想不出其他代码会弄乱这些ToolStrip项目。我试图将值更改mainBtn.Visible为真或假,认为可能存在任何联系,但似乎这不是问题所在。所以任何想法为什么会发生这种情况,为什么我不能改变Visible价值,当然还有任何方式来做到这一点。

4

2 回答 2

23

解决方案很简单,但并不明显。当我们必须处理ToolStripItems其中的一部分ToolSTripDropDownButton并解决可见性问题时,就像我们过去使用普通按钮解决它的方式一样,我们必须使用Available属性。它正是为此目的而设计的。希望有人能通过阅读本文花更少的时间来处理这个问题!

于 2013-04-01T11:22:51.253 回答
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.

于 2013-03-28T14:02:10.373 回答