ごまなつ Blog

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

【C#】ListView_SelectIndexChangedは、一瞬-1がインデックスに入る

ListView_SelectIndexChangedは、ListViewの選択されているアイテムのインデックスが変更された時に発火するイベントハンドラです。なので、処理は

private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {
             //何らかの処理       
        }

となりますが、これではエラーになります。なぜか。それは、選択されているアイテムのインデックスが変更されるとき、一瞬-1がインデックスに入るからです。aからbに選択されているインデックス変更するには、

  1. aが選択されている
  2. 選択を外す
  3. bを選択する

という処理順番をとっているようです。2の状況では、インデックスが-1になり、存在しないインデックスにアクセスしようとしてエラーが起きています。よって、

private void ListView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ListView1.SelectedItems.Count > 0)//
            {
                //何らかの処理
            }      
        }

とすることで、存在しないインデックスにアクセスしようとする状況を回避することでエラーを回避できます。