C# 删除子菜单项图像边距
C# Removing Submenu Item Image Margins
请参阅下面链接的屏幕截图。
简而言之,我需要那些小白框消失 - 它们应该包含图像,但没有图像,所以我宁愿它们消失。
我使用以下代码完成了此操作:
foreach (ToolStripMenuItem menuItem in mnuMain.Items)
((ToolStripDropDownMenu)menuItem.DropDown).ShowImageMargin = false;
我猜这适用于主要项目,但不适用于子项目,正如您在图片中看到的那样。
我尝试了上述代码的一些变体,试图让它捕获所有内容,而不仅仅是第一级项目,但没有成功。
我做错了什么?
您也应该对子项目执行此操作。为此,您可以使用此代码:
private void Form1_Load(object sender, EventArgs e)
{
SetValuesOnSubItems(this.menuStrip1.Items.OfType<ToolStripMenuItem>().ToList());
}
private void SetValuesOnSubItems(List<ToolStripMenuItem> items)
{
items.ForEach(item =>
{
var dropdown = (ToolStripDropDownMenu)item.DropDown;
if (dropdown != null)
{
dropdown.ShowImageMargin = false;
SetValuesOnSubItems(item.DropDownItems.OfType<ToolStripMenuItem>().ToList());
}
});
}
这是上面的修改版本。使用:
MainMenuStrip.HideImageMargins();
因为递归方法执行预期的操作,所以我使用重载来使预期的更清楚。使用模式匹配是因为上面的示例会抛出异常,而不是return 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());
});
}
请参阅下面链接的屏幕截图。
简而言之,我需要那些小白框消失 - 它们应该包含图像,但没有图像,所以我宁愿它们消失。
我使用以下代码完成了此操作:
foreach (ToolStripMenuItem menuItem in mnuMain.Items)
((ToolStripDropDownMenu)menuItem.DropDown).ShowImageMargin = false;
我猜这适用于主要项目,但不适用于子项目,正如您在图片中看到的那样。
我尝试了上述代码的一些变体,试图让它捕获所有内容,而不仅仅是第一级项目,但没有成功。
我做错了什么?
您也应该对子项目执行此操作。为此,您可以使用此代码:
private void Form1_Load(object sender, EventArgs e)
{
SetValuesOnSubItems(this.menuStrip1.Items.OfType<ToolStripMenuItem>().ToList());
}
private void SetValuesOnSubItems(List<ToolStripMenuItem> items)
{
items.ForEach(item =>
{
var dropdown = (ToolStripDropDownMenu)item.DropDown;
if (dropdown != null)
{
dropdown.ShowImageMargin = false;
SetValuesOnSubItems(item.DropDownItems.OfType<ToolStripMenuItem>().ToList());
}
});
}
这是上面的修改版本。使用:
MainMenuStrip.HideImageMargins();
因为递归方法执行预期的操作,所以我使用重载来使预期的更清楚。使用模式匹配是因为上面的示例会抛出异常,而不是return 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());
});
}