ListViewの複数項目削除で意図しない挙動
前回質問した内容でほとんど複数削除は解決したように
見えたのですが、どういう条件か分からないのですが
複数選択(1件選択の場合は発生しない)して削除ロジックを
実行すると選択している項目と異なる内容の配列(ArrayList)の
データを削除してしまうという事が発生します。
これは何が原因で発生しているのでしょうか?
またこれの解決法をご教授頂けないでしょうか。
環境はVS2005(C#)、.NET Framework2.0です。
以下に該当部分のコードを載せます。
2000文字を超えてしまったので問題の部分以外は省略しました。
※添付画像が見にくかったので以下のURLに再掲示しましたので
参考にしてもらえるとありがたいです。
http://angelteatime.punyu.net/questionbox_20090312.jpg
画像では350件ある受信メール(ArrayListに1件ずつMailクラスで
格納されている)の先頭から8件ぐらい選択削除をしようとしている
画面です。
private void menuDelete_Click(object sender, EventArgs e)
{
// 選択アイテムが0のときは反応にしない
if(listView1.SelectedItems.Count == 0){
return;
}
if(listView1.Columns[0].Text == "差出人"){
// 受信メールのとき
for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) {
if (listView1.Items[sel_index].Selected) {
int nIndex = (int)listView1.Items[sel_index].Tag;
if (listView1.Items[sel_index].SubItems[1].Text == ((Mail)collectionMail[RECEIVE][nIndex]).subject) {
collectionMail[DELETE].Add(collectionMail[RECEIVE][nIndex]);
collectionMail[RECEIVE].RemoveAt(nIndex);
}
else{
MessageBox.Show(string.Format("選択した件名と削除するデータが異なっています。\nリスト位置件名:{0}\n実位置件名:{1}\n(リスト位置:{2}, 実位置:{3}", listView1.Items[sel_index].SubItems[1].Text, ((Mail)collectionMail[RECEIVE][nIndex]).subject, sel_index, nIndex), "エラー", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
}
this.textBody.Text = "";
}
else if(listView1.Columns[0].Text == "宛先"){
(上記のRECEIVEがSENDに変更のみでロジック変更なし)
}
else if(listView1.Columns[0].Text == "差出人または宛先"){
(上記のDELETEに変更されDELETEの配列に格納されたデータを削除)
}
// ツリービューとリストビューの表示を更新する
UpdateTreeView();
UpdateListView();
(ListViewのフォーカスを設定し直す)
}
お礼
やはりその方法しかありませんでしたか 大変だったけどListView_GetItemとListView_SetItemで行を入れ替え 選択状態も入れ替える関数を作れました ありがとうございます