• ベストアンサー

ListViewで複数選択された項目を一度に削除する方法

ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

サンプルです。 一度に取得はムリなので、ループを使用します。   Dim itmLvw As ListItem   Dim i    As Long      '選択されているアイテムの情報を調査   For Each itmLvw In ListView1.ListItems     If itmLvw.Selected Then       Debug.Print itmLvw.Index & "番目が選択されています"     End If   Next itmLvw      'リストの後ろの方から、選択されているアイテムを削除   For i = ListView1.ListItems.Count To 1 Step -1     Set itmLvw = ListView1.ListItems(i)     If itmLvw.Selected Then       ListView1.ListItems.Remove itmLvw.Index     End If   Next i

masa__2002
質問者

お礼

ListViewはドキュメントが少なく苦労していました。本当にたすかりました。 ありがとうございました!!

関連するQ&A

  • ListViewの複数選択について

    こんにちは。 VBAでListViewを使い、DBの情報を出力しているのですが、ListViewに出力すると、必ず、1行目が選択されています。その選択自体はいいのですが、選択されているところに色付けがされていないのです。他のところを選択すると色がちゃんと付きます。どうすれば、最初の選択行に色をつけることが出来るのか教えてください。 それから、ListViewで複数件選択された場合のIndexの取り方を教えてください。今は以下のようにして1件だけは取得できています。 s = Userform2.ListView1.SelectedItem.Index 初心者なので、なるべく詳しくお願いします。

  • ListViewの複数項目削除で再度質問です

    ArrayListのソートの件とListViewのおかしな挙動は解決できたのですが 最初に質問して解決したはずの削除の部分で再び分からなくなって しまったので質問させて頂きます。 今回は本体に今までのコードを正式に組み込んで、動作の確認を 行っていたのですが、複数件(連続や個別選択)のデータ削除を 行おうとしたら意図しないデータ(未整列状態の並びのデータ)が 削除されてしまうという事態が発生してしまいました。 これはどうすれば解決できるのでしょうか? また複数件の未読既読を制御(選択された項目に対してフラグを 入れ替える)するのも同様の方法で出来るのでしょうか? 環境はVS2005(C#)、.NET Framework2.0です。 以下に問題の削除時のコードを載せます。 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) { collectionMail[DELETE].Add(collectionMail[RECEIVE][sel_index]); collectionMail[RECEIVE].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "宛先"){ // 送信メールのとき for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].Add(collectionMail[SEND][sel_index]); collectionMail[SEND].RemoveAt(sel_index); } } this.textBody.Text = ""; } else if(listView1.Columns[0].Text == "差出人または宛先"){ // 削除メールのとき if(MessageBox.Show("選択されたメールは完全に削除されます。\nよろしいですか?", "確認", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation) == DialogResult.OK){ for (int sel_index = listView1.Items.Count - 1; sel_index > -1; sel_index--) { if (listView1.Items[sel_index].Selected) { collectionMail[DELETE].RemoveAt(sel_index); } } this.textBody.Text = ""; } } // ツリービューとリストビューの表示を更新する UpdateTreeView(); UpdateListView(); // 選択している位置がリストの件数よりも少ないとき if(currentRow < listView1.Items.Count){ // 選択していた位置-1の行にフォーカスを当て直す listView1.Items[currentRow - 1].Selected = true; listView1.Items[currentRow - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } else{ // リストの件数が1以上の時 if(listView1.Items.Count > 0){ // ListViewの行数位置-1の行にフォーカスを当て直す listView1.Items[listView1.Items.Count - 1].Selected = true; listView1.Items[listView1.Items.Count - 1].Focused = true; listView1.SelectedItems[0].EnsureVisible(); listView1.Select(); listView1.Focus(); } } }

  • 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の項目を入れ替える

    C++で詳細表示のリストビューを扱うプログラムを書いているのですが あるボタンを押すと選択した項目が上や下に移動するようにしたいんです そのためには選択した項目とその上下の項目を入れ替えたらいいと思うのですが やり方がわかりません ListView_SortItemsマクロを使ってみましたが、ある二つの項目だけを入れ替えるのは できなさそうです。 MFCを使わない方法があればうれしいです

  • お気に入りの中の項目を一度に複数削除するには?

    お気に入りの中の、ある項目をひとつずつ削除することはできるのですが、一度に複数削除する方法はあるのでしょうか。(WindowsXPを使用しています)

  • ListView 削除ボタン押下時に値を取得したい

    VS2012 c# WEBフォームです。 ListViewで削除ボタンを押したときに行のアイテムを取得したいのですが、方法を教えて下さい。 更新ボタンはListViewのOnItemUpdatingイベントから Label str_id = (Label)ListView1.EditItem.FindControl("idLabel1"); とすると取得きました。 同じように 削除ボタンはListViewのOnItemDeletingイベントから Label str_id = (Label)ListView1.SelectedItemTemplate.FindControl("idLabel1"); とすると、FindControlが使えない旨のメッセージが表示されます。 ItemTemplateでも同じです。 削除ボタンはItemTemplateとSelectedItemTemplateにしか置いていないのですが、 どのように取得すれば良いのでしょうか。。

  • ListViewの選択、選択解除を行いたい

    VB6.0にて開発をしています。 ListViewで複数選択を可能とし、 Ctrl+クリックで選択、選択解除をせずに、クリックのみで選択、選択解除を行いたいです。 その際、複数選択されている場合はクリックした行のみが選択・選択解除される状態にしたいです。 CheckBoxesプロパティで行う方法は見つけられたのですが、 checkboxesプロパティが使用できないため困っています。 なにか方法がありますでしょうか?

  • 項目の複数選択

    docomoの携帯電話をつかっているのですが、項目の複数選択の仕方がわからず困っています。メールを作成するときの宛先選択など、一度に複数選択することはできるのでしょうか?回答よろしくお願いします。

  • 【ListView】選択した項目を取得

    VB6の環境です。 リストビューで、選択した項目を ダブルクリックで取得したいと思います。 どのような方法があるか教えてください。 リストボックスのように扱えなくて苦戦しております。

  • ListViewで複数項目のドラッグ&ドロップ

    やりたいことは、エクスプローラのようなアイテムのドラッグ&ドロップです。 VB付属のリストビューをそのまま使うと、大きいアイコンで表示した時、複数選択してドラッグしても動くアイテムは、1つとなってしまいます。 複数アイテムを動かす方法を知っている方がいましたら教えてほしいのですが。 環境は、 Windows2000SP3 VisualBasic6SP5 です。