在ToolStripDropDownMenu中隐藏ImageMargin和CheckMargin

时间:2011-01-03 22:22:33

标签: c# winforms toolstrip

我正在尝试在某个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。默认情况下,ToolStripDropDownMenu不包含CheckMargin或ImageMargin属性,与标准ContextMenu不同。

1 个答案:

答案 0 :(得分:4)

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;
    }
}