下面是我正在使用的代码。我的帐户存储在 Dictionary(Of String, Integer) 中,以便我可以轻松地将值与它们关联。我的列表视图在我将其转换为虚拟模式后运行良好,但我失去了搜索功能,只需输入我想要返回的列表视图即可。没有它,除非我可以按名称搜索,否则整个功能实际上毫无用处。我已经搜索并实现了多个示例,但我无法得到任何工作。我究竟做错了什么?它应该怎么看?
这填充了我的列表视图。
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。
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