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 のみを変更する方法です。ToolStripDropDownMenu には、標準の ContextMenu とは異なり、デフォルトで 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 に答える