ごまなつ Blog

楽しく働ける世界を目指して

.NET フォームアプリ ListViewに編集不能な項目を表示したい

.NETのフォームアプリにおいて、ListViewの中に編集不能な項目を表示する必要がありました。具体的には、ListViewに表示した項目でチェックボックスが入っているものに対してのみ操作をする状況で、その中に編集不能な項目を表示する必要がありました。ListViewには、1つの項目に対するEnabledプロパティがありません。どうやって実現したかの記録です。

結論

変更イベントが起きたら、変更前の状態に強制的に設定する。

private void listView_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            if (listView.Items[0].Checked == false)
            {
                listView.Items[0].Checked = true;
            }
        }

        private void listView_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listView.Items[0].Selected == true)
            {
                listView.Items[0].Selected = false;
            }
        }

listView.Items[0]はListViewの1つ目の項目です。チェックが入っている状態をキープしたいので、チェックボックスの値が変更されたイベントが起こったときチェックが外されているとチェックを入れます。 選択された状態にもならないように、選択項目が変更されたイベントが起こったとき選択された状態だと選択を外します。

無理やりではありますが、単純に考えるとこの方法が分かりやすいですし直感的だと思います。