C#删除子菜单项图像边距

时间:2015-09-15 03:57:26

标签: c# winforms visual-studio-2015 menustrip

请参阅下面的链接截图。

简而言之,我需要那些小小的白盒子消失 - 他们应该放置一个图像,但没有图像,所以我宁愿它们消失。

我使用以下代码完成了此操作:

foreach (ToolStripMenuItem menuItem in mnuMain.Items)
   ((ToolStripDropDownMenu)menuItem.DropDown).ShowImageMargin = false;

这适用于我认为的主要项目,但不适用于子项目,如图所示。

我已经尝试了上面代码的一些变体来尝试让它捕获所有内容而不仅仅是第一级项目,但没有运气。

我做错了什么?

http://i.imgur.com/bst1i4v.png

2 个答案:

答案 0 :(得分:1)

您也应该为子项目执行此操作。为此,您可以使用以下代码:

-->

答案 1 :(得分:0)

这是上面的修改版本。使用:

    MainMenuStrip.HideImageMargins(); 

因为递归方法执行了预期的操作,所以我使用了重载来使目标更清晰。使用模式匹配是因为上面的示例将引发异常,而不返回null。

    public static void HideImageMargins([NotNull] this MenuStrip menuStrip)
    {
        HideImageMargins(menuStrip.Items.OfType<ToolStripMenuItem>().ToList());
    }

    private static void HideImageMargins([NotNull] this List<ToolStripMenuItem> toolStripMenuItems)
    {
        toolStripMenuItems.ForEach(item =>
                      {
                          if (!(item.DropDown is ToolStripDropDownMenu dropdown))
                          {
                              return;
                          }

                          dropdown.ShowImageMargin = false;

                          HideImageMargins(item.DropDownItems.OfType<ToolStripMenuItem>().ToList());
                      });
    }