2017-02-01 25 views
3

これはVS2015コミュニティのVB.NET 4.5プロジェクト用です。リストボックスから選択した項目を削除する方法

リストボックスから特定の選択項目を削除しようとしましたが、選択した項目が条件を満たす場合にのみ表示されます。選択したアイテムを削除する方法の例がたくさん見つかりました。しかし、選択された項目を通過するループにネストされた条件で動作するものはありません(少なくとも、私がしようとしているもので動作する例は得られません...)

ここに私のコードです:

Dim somecondition As Boolean = True 
    Dim folder As String 
    For i As Integer = 0 To lstBoxFoldersBackingUp.SelectedItems.Count - 1 

     If somecondition = True Then 
      folder = lstBoxFoldersBackingUp.SelectedItems.Item(i) 
      Console.WriteLine("folder: " & folder) 
      lstBoxFoldersBackingUp.SelectedItems.Remove(lstBoxFoldersBackingUp.SelectedItems.Item(i)) 
     End If 
    Next 

コンソール出力には、現在のイテレーションアイテムのテキストが正しく表示されますが、Remove()を機能させることができません。コードが今のように、私はコンソール出力を取得しますが、リストボックスは変更されません。

答えて

4

アイテムを削除すると、アイテムのインデックス位置が変更されます。これを回避する方法はたくさんありますが、コードからは、その問題を避けるために逆向きに繰り返してみてください。また、SelectedItemsコレクションではなくItemsコレクションからアイテムを削除する必要があります。

For i As Integer = lstBoxFoldersBackingUp.SelectedItems.Count - 1 To 0 Step -1 
    If somecondition = True Then 
    folder = lstBoxFoldersBackingUp.SelectedItems.Item(i) 
    Console.WriteLine("folder: " & folder)    
    lstBoxFoldersBackingUp.Items.Remove(lstBoxFoldersBackingUp.SelectedItems(i)) 
    End If 
Next 
+0

なぜ親指が有効な質問のように思えますか? – codeMonger123

+0

@ codeMonger123私はdownvoteしなかった - 私は手伝ってみました。 :-) – LarsTech

+0

それは動作しますが、**どのように**?リストボックスの2番目の項目だけを選択してRemove()行に行くと、 'i'の値はselecteditemsコレクション内の唯一の項目であるため0になります。したがって、Remove()メソッドに0の値を渡しています。これはリストボックスのItemsコレクションの最初のアイテムになります。 – marky

関連する問題