C# 在ToolStripDropDownMenu中隐藏ImageMargin和CheckMargin

C# 在ToolStripDropDownMenu中隐藏ImageMargin和CheckMargin,c#,winforms,toolstrip,C#,Winforms,Toolstrip,我试图在某个ToolStrip中的每个ToolSTripDropDownMenu中设置ImageMargin和CheckMargin属性 foreach (ToolStripDropDownButton tsd in toolStrip1.Items) { ((ToolStripDropDownMenu)tsd.DropDown).ShowImageMargin = false; ((ToolStripDropDownMenu)tsd.DropDown).ShowCheckMar

我试图在某个ToolStrip中的每个ToolSTripDropDownMenu中设置ImageMargin和CheckMargin属性

foreach (ToolStripDropDownButton tsd in toolStrip1.Items)
{
    ((ToolStripDropDownMenu)tsd.DropDown).ShowImageMargin = false;
    ((ToolStripDropDownMenu)tsd.DropDown).ShowCheckMargin = false;
}
将引发一个异常,说明以下内容:

System.InvalidCastException:无法将类型为“System.Windows.Forms.ToolStripButton”的对象强制转换为类型为“System.Windows.Forms.ToolStripDropDownButton”


ToolStrip包含ToolStripDropDownButtons之外的控件(即ToolStripButtons和ToolStripLabels),因此我可以看到错误发生的位置。我无法理解的是如何只修改ToolStripDropDownButtons。与标准ContextMenu不同,ToolStripDropDownMenu默认情况下不包含CheckMargin或ImageMargin属性。

foreach语句不执行任何筛选,因此当您将项类型声明为现有的
ToolStripDropDownButton
时,它将尝试将序列中的每个项强制转换为该类型。由于某些项不可能这样做,因此需要声明一个不太特定的类型,并检查所需的实例:

foreach (ToolStripItem tsi in toolStrip1.Items)
{
    if (tsi is ToolStripDropDownButton) {
        ToolStripDropDownButton tsd = (ToolStripDropDownButton)tsi;
        ((ToolStripDropDownMenu)tsd.DropDown).ShowImageMargin = false;
        ((ToolStripDropDownMenu)tsd.DropDown).ShowCheckMargin = false;
    }
}