やりたかったこと
CheckedListBoxでひとつの項目だけチェックできるようにしたかった。
やってみたこと
CheckedListBoxのSelectionModeプロパティをOne(単一選択)にした。というかデフォルトがこれ。
結果
ふつうに複数チェックができる。
なんで?
チェックと選択は違う
らしいです。選択はいわゆる項目の背景が青くなるやつ。
ちなみにSelectionModeはNone,Oneの他MultiExtended,MultiSimpleがありますが後者2つはListBox用でCheckedListBoxでは指定できません。
またNoneを指定すると選択もチェックもできない状態になる。
対策
ListBox使えよ
ListBoxは単一選択、複数選択は思いのままできます。
ただUI的に選択してる感が薄いというか・・・とくに古い時代のユーザにはわかりづらい。
ItemCheckイベントでゴリ押し
諸事情でCheckedListBoxをどうしても使いたい場合は、stackoverflowで同様の記事があったのでCheckedListBoxで単一チェックのみできるソースを転載します。
int lastCheckedIndex = -1;
//ItemCheck event handler for your checkedListBox1
private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.Index != lastCheckedIndex)
{
if(lastCheckedIndex != -1)
checkedListBox1.SetItemCheckState(lastCheckedIndex, CheckState.Unchecked);
lastCheckedIndex = e.Index;
}
}
//To register event
checkedListBox1.ItemCheck += checkedListBox1_ItemCheck;