2

我正在尝试在某个 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 属性。

4

1 回答 1

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;
    }
}
于 2011-01-04T01:03:10.803 回答