如何设置 ToolStripMenuItem 在代码中可见?

How to set a ToolStripMenuItem Visible in code?

我在 Windows Forms 应用程序中有一些代码。
我想在代码中更改下拉菜单 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;
       }                                                
   }                                           
}

如何解决这个问题?

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

如果您设置为truefalse,它表示object是否可见(或不可见)。但是,当您 阅读 它时,它会显示该控件的可见性是设置为 true 还是 false,但如果 any [=39=,它将显示为 false ]在链中也被隐藏了

所以设置和读取它是不同的事情:即使你将它设置为 true,当你读回它时它可能会在调试器中出现 false(再次,如果有的话 [=链中的 39=] 是隐藏的):当所有 parent 都可见时,它会变成 true

对于 ToolStripItem 具体而言,请使用 Available 属性 而不是 Visible:这应该符合您的预期。文档(我链接的)专门讨论了这个:

The Available property is different from the Visible property in that Available indicates whether the ToolStripItem is shown, while Visible indicates whether the ToolStripItem and its parent are shown. Setting either Available or Visible to true or false sets the other property to true or false.