Скрыть ImageMargin и CheckMargin в ToolStripDropDownMenu - PullRequest
2 голосов
/ 04 января 2011

Я пытаюсь установить свойства ImageMargin и CheckMargin в каждом ToolSTripDropDownMenu в определенной ToolStrip.

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 Ответ

4 голосов
/ 04 января 2011

Оператор 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;
    }
}
...