0

Visual Basic では、1 つだけではなく、選択したすべてのアイテムを取得しようとしています。これは、このプロセスを試みる前のコードです。

            For Each line As String In lines
                If line.Contains(lbActiveKeys.SelectedItem) Then
                    lines.Remove(line)
                    Exit For
                End If
            Next

行に lbActiveKeys.SelectedItems* (リスト ボックス) のいずれかが含まれているかどうかを確認する方法がわかりませんでした。入れ子になったループを実行しようとしましたが、すべてエラーでした。

これを達成するための最良の方法は何ですか?

乾杯。

4

3 に答える 3

1

逆の方法で SelectedItems コレクションを反復処理することもできます。これはうまくいくはずです:

    For Each Item As String In lbActiveKeys.SelectedItems
        Dim SearchString As String = Item
        If Lines.Contains(Item) Then
            Lines.Remove(Lines.Find(Function(x) x = SearchString))
        End If
    Next
于 2013-06-30T12:47:44.180 に答える
0

あなたはlinqでこれを行うことができます:

lines = lines.Where(Function(x As String) As Boolean
                        Return Not lbActiveKeys.SelectedItem.Cast(Of String) _
                                   .Where(Function(y) As Boolean
                                              Return x.Contains(y)
                                          End Function).Any()
                    End Function).ToList()

一方の文字列に他方の文字列が含まれているかどうかによって選択が決定される、選択された項目リストと交差しない項目を選択します。

于 2013-06-30T12:37:32.337 に答える
-1

選択したオブジェクト全体ではなく文字列値を比較したいので、 lbActiveKeys.SelectedItem.Value が必要だと思います...大文字と小文字を同じにして、それらが適切に比較されるようにトリミングすることもできます。

For Each line As String In lines
   If line.ToLower().Contains(lbActiveKeys.SelectedItem.Value.ToLower()) Then
       lines.Remove(line)
       Exit For
   End If
Next
于 2013-06-30T12:18:59.167 に答える