LoginSignup
2
2

More than 5 years have passed since last update.

CheckedListBoxのSelectionModeをOneにしても複数チェックできるやん(`Д´)

Posted at

やりたかったこと

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;
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2