2011-08-02 4 views
0

私はWindowsアプリケーションフォームに取り組んでいます。私は1つのテキストボックスとリストボックスを持っています。私は、テキストボックス上のユーザータイプ、リストボックスアイテムが選択されていればうまくいきたいです。リストボックスには10,000以上のレコードがあります。テキスト変更プロパティ - パフォーマンスヒットで選択されたインデックス値

テキストボックスにデータを書き込む間、ListBoxから項目を選択するには時間がかかります。ここで

は私のコードです:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged 
     If TextBox1.Text.Length > 0 Then 
      Dim iSelectedInd As Int32 
      iSelectedInd = lstParty.FindString(TextBox1.Text) 
      If iSelectedInd >= 1 Then 
       lstParty.SetSelected(iSelectedInd, True) 
      End If 
     End If 
End Sub 
+1

どのように 'lstParty'をビルドしますか?ディクショナリ(intはリストボックスのインデックス)を使用できますか?これはより速いルックアップを与えるでしょう –

+0

ここでは、wudはエントリがどこにあるのかListBoxのインデックスを見つけなければなりません。あなたはこのurジョブが完了したことを知ります。しかし、それは検索に時間がかかる...だから複数のスレッドとこれは、所望のエントリのインデックスを返す。第1勝...このエントリは、エントリを検索するための時間を短縮する。 – Anirudha

答えて

0

あなたは1秒の遅延が含まれている場合、ユーザーが入力を停止した場合、それが唯一のリストを検索します。 Interval = 1000Enabled = FalseTimerを作成します。

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox1.TextChanged 
    ' Reset the timer. 
    Timer1.Enabled = False 
    Timer1.Enabled = True 
End Sub 

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick 
    ' Stop the timer. 
    Timer1.Enabled = False 
    ' Search the list for the text. 
    If TextBox1.Text.Length > 0 Then 
     Dim iSelectedInd As Int32 
     iSelectedInd = lstParty.FindString(TextBox1.Text) 
     If iSelectedInd >= 1 Then 
      lstParty.SetSelected(iSelectedInd, True) 
     End If 
    End If 
End Sub 
関連する問題