• ベストアンサー

[VB2008]リストボックス内の複数選択された項目を削除したい

タイトルの通り、リストボックス内の複数選択された項目を削除したいのですが どうすればいいでしょうか? 下記のコードを組んでみましたが動作しませんでした。 Dim SelectItem As Object Dim ItemList As String = "" For Each SelectItem In Me.ListBox1.SelectedItems Me.ListBox1.Items.Remove(SelectItem.ToString()) Next ご回答お願いします。

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

  • ベストアンサー
  • atse
  • ベストアンサー率83% (36/43)
回答No.2

For Each...Next ステートメント (Visual Basic) http://msdn.microsoft.com/ja-jp/library/5ebk1751.aspx 私も詳しくはないのですが、上記ヘルプの 「コレクションの変更」「コレクション要素の変更」 あたりが問題部分ではないでしょうか。 今回の場合は、For Eachで回している中、 Me.ListBox1.Items.Removeで値が削除されるということは、 結果、選択している項目(Me.ListBox1.SelectedItems)が減るわけなので、 「コレクション要素の変更」に値するものなのだと思います。 Whileはループ文です。 1 : While (Me.ListBox1.SelectedItems.Count > 0) 2 : Me.ListBox1.Items.Remove(Me.ListBox1.SelectedItems(0)) 3 : End While 基本:  1行目の()内がTRUEの限り、While~End While内にある内容(今回の場合は2行目)を繰り返します。 内容: (1)...1行目()内の条件を評価します。   ()内は選択項目数(Me.ListBox1.SelectedItems.Count)が0より上=>1つでもあればTRUEとする、という条件です。   FALSEだったら、以降(2)は実行せずにループを抜け、終了します。   TRUEの場合は(2)を実行します。 (2)...選択されている項目の1つ目(Me.ListBox1.SelectedItems(0))をリストボックスから削除します。   それに伴い、選択項目数(Me.ListBox1.SelectedItems.Count)も削除された分減りました。 (3)...(1)に戻ります。

その他の回答 (1)

  • atse
  • ベストアンサー率83% (36/43)
回答No.1

For Eachの初期設定でMe.ListBox1.SelectedItems、 仮に全部で10アイテムを回すと決めたのに、 途中で項目を消していってしまうので、 例外範囲に達してしまう可能性があるのでエラーになるのだと思います。 下記のようにすれば順次消せると思いますよ。 '選択されている項目がある限り While (Me.ListBox1.SelectedItems.Count > 0) '選択されている項目を削除する Me.ListBox1.Items.Remove(Me.ListBox1.SelectedItems(0)) End While

yue_1995
質問者

お礼

まだ初心者なので自分の書いたコードの内容がうまく理解できていませんでした。 もしよろしければ、For Each ~ NextとWhile ~ End Whileの動作を詳しく教えていただけないでしょうか?

関連するQ&A