Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Winforms中禁用的菜单项仍显示子项_C#_Winforms_Menuitem_Menu - Fatal编程技术网

C# Winforms中禁用的菜单项仍显示子项

C# Winforms中禁用的菜单项仍显示子项,c#,winforms,menuitem,menu,C#,Winforms,Menuitem,Menu,如果我创建一个包含两个项目(比如“Item1”和“Item2”)的菜单,然后在每个项目(1A、1B、2A和2B)下创建两个子项目,然后禁用Item1,我希望1A和1B不会显示 事实上,如果我转到第1项,它们不会。除非我接着转到第2项,等待2A和2B显示,然后再回到第1项。此时1A和1B都会弹出,完全激活 这是一个已知的错误吗?这是我可以解决的问题吗?有什么建议吗 用户希望能够看到当前被禁用的内容,或者我只想让内容不可见。遗憾的是,这不是一个我们可以轻松使用的选项。我可以确认,框架2.0、3.5和

如果我创建一个包含两个项目(比如“Item1”和“Item2”)的菜单,然后在每个项目(1A、1B、2A和2B)下创建两个子项目,然后禁用Item1,我希望1A和1B不会显示

事实上,如果我转到第1项,它们不会。除非我接着转到第2项,等待2A和2B显示,然后再回到第1项。此时1A和1B都会弹出,完全激活

这是一个已知的错误吗?这是我可以解决的问题吗?有什么建议吗


用户希望能够看到当前被禁用的内容,或者我只想让内容不可见。遗憾的是,这不是一个我们可以轻松使用的选项。

我可以确认,框架2.0、3.5和4.0的MenuStrip会出现这种情况。我唯一合理的解决方法是将
Visible
属性设置为
false,因此该项根本不会出现。这并不理想,但比访问子项要好


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

我也遇到了同样的问题,希望在答案中添加几句话。 您可能希望在从菜单项继承的单独控件中实现Chris Taylor提到的变通方法,并进行单元测试。 这是引自

ToolStripMenuItem有两个可见性属性:可见和 他们都做同样的事情,除非他们不做

更具体地说,他们两个二传手都做同样的事情 要隐藏菜单项,可以将Visible设置为false,或者 可以设置为false。同样的事情。那么为什么有两个呢 相同事物的属性

不同之处在于,如果您想阅读属性,就要找出 项目是否已隐藏。可见的getter不起作用 你想要什么。永远不要使用它。阅读可见并不会告诉你“我有吗?” 将Visible设置为true?“不,这是可用的(显然) 不,阅读“可见告诉你”是当前在屏幕上弹出的菜单吗 屏幕?“其有用性分数小于或等于 给真菌打脚趾

概述:始终使用可用。从不使用可见。一个例外是 表单设计器-Available未显示在属性网格中,因此 你被困在这里了

问候,

马克斯