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

我正在研究MDI Windows Forms应用程序。 我的父窗体有ToolStrip菜单和一些ToolStripDropDownButtons 。 我想更改ToolStripDropDownButtonVisible属性,或者根据用户的权限更改它具有的某些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的值mainBtn.Visible为true或false,认为可能存在任何连接,但似乎这不是问题。 所以任何想法为什么会发生这种情况,为什么我无法改变Visible值,当然也无法改变它。

解决方案很简单,但并不明显。 当我们必须使用属于ToolSTripDropDownButton ToolStripItems并解决可见性问题时,我们必须使用普通按钮来解决它,我们必须使用Available属性。 它专为此目的而设计。 希望有人通过阅读这个来减少处理这个问题的时间!

以下内容将通过menuStrip1所有toolstripitems menuStrip1

  List allItems = new List(); 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任何内容。