ごまなつ Blog

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

【C#】ListViewで移動禁止にしたい

結論

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
        {
            if (e.IsSelected && (e.Item != selectedItem))
            {
                if (isChanged)  
                {
                    e.Item.Selected = false;
                    selectedItem.Selected = true;                   
                    if (Counter)
                    {
                        Counter = false;
                        MessageBox.Show("移動できません");
                    }
                    else
                    {
                        Counter = true;
                    }
                }
                else
                {
                    selectedItem = e.Item;
                }
            }
        }
        private void listView1_MouseUp(object sender, MouseEventArgs e)
        {
            selectedItem.Selected = true;   //これが無いと選択状態が消える
        }

動作

イベントハンドラで、選択されているアイテムが変更されるときに、選択されているアイテムがイベントハンドラを発生させていて、アイテムは異なるときに変更があったら選択を無効化して選択されたアイテムに戻しています。 このCounterというのは、選択を変更する一連の動作がItemSelectionChangedを2回呼ぶので、1回しかメッセージボックスを出さないように入れています。

MouseUpを入れておかないと、選択状態が消えます。listViewはほかの場所をクリックすると選択が消えますよね。