2014-11-25 1 views
0

아래 코드는 내가 작업하고있는 코드입니다. 내 계정은 Dictionary (Of String, Integer)에 저장되어 값을 쉽게 연결할 수 있습니다. 가상 모드로 변환 한 후 내 listview가 훌륭하게 작동하지만 간단히 listview를 입력하여 검색 기능을 잃어 버렸습니다. 다시 얻고 싶습니다. 이 기능이 없으면 이름으로 검색 할 수없는 한 전체 기능이 실질적으로 쓸모 없게됩니다. 여러 예제를 검색하고 구현 했으므로 아무 것도 얻을 수 없습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까? 어떻게 보일까요?FindItemWithText를 사용하는 방법?

내 목록보기가 채워집니다.

Private Sub lstAccounts_RetrieveVirtualItem(sender As Object, e As RetrieveVirtualItemEventArgs) Handles lstAccounts.RetrieveVirtualItem 
    lstAccounts.VirtualListSize = MainForm.accounts.Count 'Update after a dictionary edit. 

    Dim i As New ListViewItem(MainForm.accounts.Keys(e.ItemIndex)) 
    If MainForm.accounts.ContainsKey(MainForm.accounts.Keys(e.ItemIndex).ToString) Then 
     i.SubItems.Add(MainForm.accounts.Item(i.Text)) 
    End If 
    e.Item = i 
End Sub 

이것은 MSDN에서 제공했습니다. 기발한, 검색을 위해 내가 찾을 수있는 유일한 예 ..

Private Sub lstAccounts_SearchForVirtualItem(sender As Object, e As SearchForVirtualItemEventArgs) Handles lstAccounts.SearchForVirtualItem 
    Dim x As Double = 0 
    If [Double].TryParse(e.Text, x) Then 'check if this is a valid search 
     x = Math.Sqrt(x) 
     x = Math.Round(x) 
     e.Index = Fix(x) 
    End If 
End Sub 

이것은 MSDN에서 또한 필요합니다. 내가 무엇을 검색하든 관계없이 항상 null을 반환합니다. SearchForVirtualItem 이벤트에 대한 핸들러에서

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged 
    Dim item1 As ListViewItem = lstAccounts.FindItemWithText(TextBox1.Text) 
    If (item1 IsNot Nothing) Then 
     MessageBox.Show("Calling FindItemWithText passing" & TextBox1.Text & ": " _ 
      & item1.ToString()) 
    Else 
     MessageBox.Show("Calling FindItemWithText passing" & TextBox1.Text & ": null") 
    End If 
End Sub 
+0

정말 누군가가 나를 도울 수 있기를 바랬습니다. – Josh

답변

1

, 당신은 당신의 사전을 검색 한 다음 ListView 입력 있었는지 일치하는 행의 인덱스를 알려야합니다.

foreach (var x in MainForm.accounts) { 
    if (x.Value == e.Text) { 
     e.Index = x.Key; 
     return; 
    } 
} 

BTW, 그것은 다른 곳 가상 목록의 크기를 업데이트하는 것이 좋습니다 : 텍스트를 검색 할 것으로 추측

, 당신이 뭔가를 할 수 있습니다. RetrieveVirtualItem 이벤트의 처리기는 목록의 크기를 변경하는 적절한 위치가 아닙니다.

+0

고마워요 @ 그래미언. 나는 이것으로 일할 것이다. – Josh

관련 문제