以下は私が取り組んでいるコードです。私のアカウントは 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