[Forms][C#]メニューに排他的にチェックをいれる
C#でFormsを使ってプログラムする機会があって調べたメモ。メニューのあるアイテムの下層をひとつのグループとみなし、そのグループ中で一つだけチェックが入る前提で、メニューを選択した際にチェックをいれる処理を統一したもの。親menu1の下に子menu1_menu1,menu1_menu2,... があるとして、各メニューの処理時に同じ
CheckMenuExclusively
を呼び出すことで排他的にチェックマークが入る。当然チェックを入れる以外の処理は別途必要。たぶん似たようなものはそこらに転がってるけど、子メニューを示すメソッドがItems
ではなくDropDownItems
であったことため、しばし悩んだのでメモしておく。
void CheckMenuExclusively(object sender, ToolStripMenuItem upper)
{
foreach (ToolStripMenuItem item in upper.DropDownItems)
{
if (object.ReferenceEquals(sender, item))
{
item.Checked = true;
}
else
{
item.Checked = false;
}
}
}
private void menu1_menu1_Click(object sender, EventArgs e)
{
CheckMenuExclusively(sender, menu1);
}