- ベストアンサー
ListViewで複数選択された項目を一度に削除する方法
ListViewで選択された複数のアイテムの値の取得方法と複数選択された項目を一度に削除する方法を教えてください。
- masa__2002
- お礼率100% (9/9)
- Visual Basic
- 回答数1
- ありがとう数3
- みんなの回答 (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
関連するQ&A
- ListViewの複数選択について
こんにちは。 VBAでListViewを使い、DBの情報を出力しているのですが、ListViewに出力すると、必ず、1行目が選択されています。その選択自体はいいのですが、選択されているところに色付けがされていないのです。他のところを選択すると色がちゃんと付きます。どうすれば、最初の選択行に色をつけることが出来るのか教えてください。 それから、ListViewで複数件選択された場合のIndexの取り方を教えてください。今は以下のようにして1件だけは取得できています。 s = Userform2.ListView1.SelectedItem.Index 初心者なので、なるべく詳しくお願いします。
- ベストアンサー
- Visual Basic
- 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を使わない方法があればうれしいです
- ベストアンサー
- C・C++・C#
- お気に入りの中の項目を一度に複数削除するには?
お気に入りの中の、ある項目をひとつずつ削除することはできるのですが、一度に複数削除する方法はあるのでしょうか。(WindowsXPを使用しています)
- ベストアンサー
- Windows XP
- 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にしか置いていないのですが、 どのように取得すれば良いのでしょうか。。
- ベストアンサー
- Microsoft ASP
- ListViewの選択、選択解除を行いたい
VB6.0にて開発をしています。 ListViewで複数選択を可能とし、 Ctrl+クリックで選択、選択解除をせずに、クリックのみで選択、選択解除を行いたいです。 その際、複数選択されている場合はクリックした行のみが選択・選択解除される状態にしたいです。 CheckBoxesプロパティで行う方法は見つけられたのですが、 checkboxesプロパティが使用できないため困っています。 なにか方法がありますでしょうか?
- ベストアンサー
- Visual Basic
- 【ListView】選択した項目を取得
VB6の環境です。 リストビューで、選択した項目を ダブルクリックで取得したいと思います。 どのような方法があるか教えてください。 リストボックスのように扱えなくて苦戦しております。
- ベストアンサー
- Visual Basic
- ListViewで複数項目のドラッグ&ドロップ
やりたいことは、エクスプローラのようなアイテムのドラッグ&ドロップです。 VB付属のリストビューをそのまま使うと、大きいアイコンで表示した時、複数選択してドラッグしても動くアイテムは、1つとなってしまいます。 複数アイテムを動かす方法を知っている方がいましたら教えてほしいのですが。 環境は、 Windows2000SP3 VisualBasic6SP5 です。
- 締切済み
- Visual Basic
お礼
ListViewはドキュメントが少なく苦労していました。本当にたすかりました。 ありがとうございました!!