1

指定されたインデックスからリストビューを検索し、単語の最初の結果(アイテムが存在するインデックス)を返しています。リストビューの最初の列しか検索できないことを除けば、うまく機能します。2番目の列のみを検索するにはどうすればよいですか?

Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal SearchFor As String) As Integer
Dim idx As Integer
Dim It = From i In LV.Items Where i.index > CIndex And i.Text = SearchFor
If It.Count > 0 Then
    idx = It(0).Index
Else
    idx = -1
End If
Return idx
End Function
4

2 に答える 2

1

ListViewItemのListViewSubItemsにアクセスして、他の列を取得する必要があります。サブアイテムを使用すると、テキストを検索するだけでなく、インデックスでさまざまな列を検索できます。ループ内のループを使用して検索を実行できます。2番目の列のみを検索することがわかっているので、必要に応じて明示的にすることもできますが、ループ内でループを使用することにより、実際には任意の列を検索できます。サンプルは次のとおりです。

Dim idx As Integer = -1
For Each lvi As ListViewItem In Me.lvwData.Items
    If lvi.SubItems(1).Text = "TextToSearchFor" Then
        idx = lvi.Index
    End If
Next
于 2012-11-26T19:53:55.670 に答える
0

私はそれを理解しました。このソリューションでは、検索を開始する指定のインデックスを選択し、インデックスが1の列をチェックできます(通常、これは2番目の列です)

    Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal SearchFor As String) As Integer
    Dim idx As Integer
    Dim It = From i In LV.Items Where i.index > CIndex And i.SubItems(1).Text = SearchFor
    If It.Count > 0 Then
        idx = It(0).Index
    Else
        idx = -1
    End If
    Return idx
    End Function

次のように、関数に別のパラメーターを追加して、文字列をチェックするために別の列を選択することもできます。

    Private Function FindLogic(ByVal LV As ListView, ByVal CIndex As Integer, ByVal Column As Integer, ByVal SearchFor As String) As Integer
    Dim idx As Integer
    Dim It = From i In LV.Items Where i.index > CIndex And i.SubItems(Column).Text = SearchFor
    If It.Count > 0 Then
        idx = It(0).Index
    Else
        idx = -1
    End If
    Return idx
    End Function

この関数を使用するには、次のようになります。

     FindLogic(Listview1, 1, 1, "Dog")

次のように、選択したアイテムから検索することもできます。

     FindLogic(Listview1, 1, LV.SelectedIndices(0), "Dog")
于 2012-11-26T19:52:58.343 に答える