1

我在 Windows 窗体应用程序中有一些代码。
我想在代码中更改下拉 ToolStripMenuItems 的可见性。
我设置了 Visible 属性,但是当我设置断点并检查属性值时,项目的可见性并没有改变。

这是我的代码:

foreach (ToolStripMenuItem it in _frmMain.menuStripMain.Items)
{
   foreach (ToolStripMenuItem i in it.DropDownItems)
   {
       if (i.Text == this._listAppSchema[0].ObjectName.ToString())
       {
          i.Visible = true;
       }
       else
       {
          i.Visible = false;
       }                                                
   }                                           
}

如何解决这个问题?

4

1 回答 1

4

Visible是一个复杂的属性。它的设置和读取方式不同。

如果您其设置为truefalse表示对象是否可见(或不可见)。但是,当您阅读它时,它会显示该控件的可见性是设置为 true 还是 false,但它会读取false好像链中的任何父级也被隐藏了一样。

所以设置和读取它是另一回事:即使你将它设置为,当你读回它时true它可能会false进入调试器(再次,如果链中的任何父级被隐藏):它会变成true当所有父级都虽然可见。

具体来说ToolStripItem,使用Available属性而不是Visible: 这应该可以满足您的期望。文档(我链接)专门讨论了这一点:

Available 属性与 Visible 属性的不同之处在于,Available 指示是否显示 ToolStripItem,而 Visible 指示是否显示 ToolStripItem 及其父项。将 Available 或 Visible 设置为 true 或 false 会将其他属性设置为 true 或 false。

于 2016-07-04T05:21:08.893 回答