2010-08-27 96 views
0

如果我创建一个包含两个项目(称为“Item1”和“Item2”)然后在每个项目(1A,1B,2A和2B)下创建两个子项目的菜单,然后禁用Item1 ,我预计1A和1B将不会显示Winforms中的禁用菜单项目仍显示子项目

而且,如果我移动到Item1上,他们不会,除非我继续前进到Item2,请等待2A和2B显示,然后回迁项目1。在这一点1A和1B都弹出,全面活跃。

这是一个已知的bug?有什么事情我可以解决?有什么建议?

的用户希望能够看到的东西目前处于禁用状态,或者我只是将事情隐藏起来。可悲的是,这不是我们可以轻松使用的选项。

+0

这VS的版本? – Beth 2010-08-27 16:06:06

+0

Visual Studio 2005。 – 2010-08-27 16:09:04

回答

2

我可以确认这发生在MenuStrip for Framework 2.0,3.5和4.0。我拥有的唯一合理的解决方法是将Visible属性设置为false,因此该项不会显示。不理想,但比有子项可访问更好。

当然,您也可以创建一个递归禁用所有子项的函数,即使它们出现,至少它们至少被禁用,您仍然需要保持之前的状态,启用实际上被禁用的子项目等。文档表明实际上会发生这种情况,但情况并非如此,即使父项目被禁用,子项目仍保持启用状态。

0

我遇到了同样的问题,并想在答案中加几句话。 您可能想要在由菜单项继承的单独控件中实现Chris Taylor提到的workaroud,并进行单元测试。在这种情况下,您需要使用可用属性而不是可见。 下面是从http://blog.excastle.com/2008/12/28/fixing-menustrip-part-2-visible-vs-available-and-a-repro-case/

ToolStripMenuItem报价有两个知名度属性:可见光和 可用。他们都做同样的事情,除非他们不这样做。

更具体地说,他们的制定者都做同样的事情。所以如果你想隐藏一个菜单项,你可以将Visible设置为false,或者你可以设置为false。一样。那么为什么有两个 属性为同一件事?

所不同的是,如果你想读取属性,找出 项目是否已经隐藏。可见的吸气剂不会做 你想要的。切勿使用它。 Reading Visible不会告诉你“我是否已将 设为可见?”否,这就是Available的用途。 (很明显)。 不,看得见的告诉你“是目前在 屏幕上弹出的菜单吗?”它有一个小于或等于 到脚趾真菌的有用性评分。

总结:始终使用可用。切勿使用可见。有一个例外是表格设计器 - 可用不在属性网格中显示,因此 那里存在Visible。

问候,

最大