2017-02-19 21 views
0

私は自分のプログラムにリストボックスを持っており、コンテキストメニューにアクセスして削除をクリックすることで、ユーザが特定の項目を削除できるようにします。そのアイテムを順番に削除すると(トップアイテムから最後のアイテムまで)、すべてが正常に動作しているようです。ただし、アイテムを順番に削除しないと、デバッグエラーが発生します。私は自分の選択したアイテムをどのように削除できるのか知りたい。コンテキストメニューを使用してリストボックスの項目を削除するC#

これは、ユーザーが右のリストボックス内の項目をクリックした後に実行されるコードです:

public void listBox_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Right) 
    { 
     index = listBox.IndexFromPoint(e.Location); 
     { 
      if (index == listBox.SelectedIndex) 
      { 
       contextMenuStrip1.Show(); 
      } 
     } 
    } 
} 

これは、クリックイベントハンドラです:

private void deleteToolStripMenuItem1_Click(object sender, EventArgs e) 
{ 
    listBox.Items.Remove(listBox.SelectedItems[index]); 
} 

これはからのエラー・メッセージですIDE: System.Windows.Forms.dllで 'System.IndexOutOfRangeException'型の未処理の例外が発生しました 追加情報:インデックスが配列の境界外にありました。

+1

は、エラーメッセージ –

+0

は、あなたがのObservableCollectionを必要とする何をするのか? – cSteusloff

答えて

2

listBox.SelectedIndexは、選択したアイテムのコレクションを返します。ユーザーは1つのアイテムしか選択しないので、このコレクションにはインデックス0のアイテムが1つしかありません。インデックスが0以外のアイテムを削除しようとするとエラーが発生します。代わりにlistBox.Items.RemoveAt(index)を使用してください:

private void deleteToolStripMenuItem1_Click(object sender, EventArgs e) 
{ 
    listBox.Items.RemoveAt(index); 
} 
関連する問題