2014-11-25 2 views
0

Ниже приведен код, с которым я работаю. Мои учетные записи хранятся в словаре (Of String, Integer), поэтому я могу легко связать с ними значение. Мой список отлично работает после того, как я преобразовал его в virtualmode, но я потерял функциональность для поиска, просто введя список, который я хотел бы получить назад. Без этого это делает всю функцию практически бесполезной, если я не могу искать по имени. Я искал и реализовал несколько примеров, и я не могу заставить работать. Что я делаю не так? Как это должно выглядеть?Как использовать 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. Предположительно требуется для поиска, только пример, который я мог найти.

Это также из MSDN. Независимо от того, что я ищу, он постоянно возвращает null.

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

В обработчике для SearchForVirtualItem события, вы должны искать свой словарь, а затем сказать ListView индекс строки, соответствует то, что было напечатано.

Гадать, что вы хотите искать текст, вы хотите что-то вроде этого:

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

Кстати, это лучше обновить размер виртуального списка где-то еще. Обработчик события RetrieveVirtualItem не подходит для изменения размера списка.

+0

Спасибо @Grammarian. Я буду работать с этим. – Josh