c#删除子菜单项图像边距
本文关键字:图像 菜单项 删除 | 更新日期: 2023-09-27 18:12:48
见下面的链接截图
简而言之,我需要那些白色的小盒子消失——它们应该容纳图像,但是没有图像,所以我宁愿它们消失。
我用下面的代码完成了这个任务:
foreach (ToolStripMenuItem menuItem in mnuMain.Items)
((ToolStripDropDownMenu)menuItem.DropDown).ShowImageMargin = false;
这适用于我猜是主要项目,但不是子项目,正如你在图片中看到的。
我已经尝试了上面的代码的一些变化,试图让它捕捉一切,而不仅仅是第一个级别的项目,但没有运气。
我做错了什么?
http://i.imgur.com/bst1i4v.png对于子条目也应该这样做。为此,您可以使用以下代码:
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();
因为递归方法执行预期的操作,所以我使用重载来更清楚地说明预期的操作。使用模式匹配是因为上面的示例将抛出异常,而不是返回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());
});
}