[C#]MenuStripドロップダウンアイテムのチェック切り替え
MenuStrip内のリストのチェック状態を切り替える
[環境]
VisualStudio2008
C# Windowsフォームアプリケーション
上記のように、「テスト」メニューが「テスト1」をもち、その「テスト1」がさらに
「サブアイテムX」の3つのアイテムをもっているとき、チェック状態を排他的に
切り替える(ラジオボタンのように扱う)方法。
各アイテムがクリックされたときに、全てのサブアイテムにたいして
Checkedプロパティをtrue/falseで切り替えるのは美しくないので
メソッドにまとめる。
そんなことするヤツいねーよと言われるかも知れないが、コレを調べだすまでは
上記の方法でやっていた。
実現したときはちょっとした感動。つか、Frameworkで対応しろよ。
マイクロアドBTパートナーはブログやサイトに貼るだけ。お小遣いをゲットしよう!
[デザイナ]
テスト1
Name:_menuTest1
サブアイテム1
Name:_menuSub1
サブアイテム2
Name:_menuSub2
CheckOnClick:true
サブアイテム3
Name:_menuSub3
[コード]
_menuSub1/2/3 の 「Click」クリックイベントハンドラと、それらを排他的に切り替える
メソッド、「SelectCheckedItem(適当な名前)」を用意する。
/// サブアイテム1Clickイベントハンドラ
private void _menuSub1_Click(object sender, EventArgs e)
{
SelectCheckedItem(sender);
}
/// サブアイテム2Clickイベントハンドラ
private void _menuSub2_Click(object sender, EventArgs e)
{
SelectCheckedItem(sender);
}
/// サブアイテム3Clickイベントハンドラ
private void _menuSub3_Click(object sender, EventArgs e)
{
SelectCheckedItem(sender);
}
/// チェック状態切り替え
private void SelectCheckedItem(object sender)
{
foreach (ToolStripMenuItem item in _menuTest1.DropDownItems)
{
if (item.Equals(sender))
{
item.Checked = true;
}
else
{
item.Checked = false;
}
}
}
サブアイテムを3つもつ、親のToolStripMenuItemである_menuTest1がもつ
プロパティ、DropDownItemsをforeachでまわして、チェックされたオブジェクトと
等しかったらチェックを有効にしている。