1

Google の AutoSuggest 検索テキスト ボックスと同様に、一致する項目のリストをデータベースに送信する WinForm オートコンプリート テキストボックスの良い例を探しています。

たとえば、ユーザーが非常に速く入力する場合、キーストロークごとに 1 つのデータベース検索を送信する必要はありませんが、結果を取得した後、ユーザーが検索されていない追加のキーストロークをキューに入れている場合は、別の検索を実行します。

アップデート:

例えば、

以前に WinForm アプリでマルチスレッドを実行したことはありませんでしたが、検索テキスト ボックスの内容が変更されるたびに新しいスレッドを開始し、データベースに一致するクエリを実行すると思いました。結果が返されるまでにテキストボックスが変更された場合、クエリの結果は無視されます。

ただし、次のエラーが発生します。

Cross-thread operation not valid: Control accessed from a thread other than the thread it was created o

これが私のコードです:

 private void txtSearch_TextChanged(object sender, EventArgs e)
        {

            Thread newThread = new Thread(BeginSourceThread);
            newThread.Start(txtSearch.Text);
        }

        private void BeginSourceThread(object value)
        {

            string searchText = (string)value;

            AutoCompleteStringCollection autoCompleteItems = new AutoCompleteStringCollection();

            DataSet ds = MetaData.GetMatchingDatabaseObjects(txtSearch.Text, sqlConnectionStringBuilder.ConnectionString);
            DataTable dtbObjects = ds.Tables[0];

            if (txtSearch.Text != searchText)
            {
                return;
            }

            foreach (DataRow row in dtbObjects.Rows)
            {
                autoCompleteItems.Add(row["ObjectName"].ToString());
            }

            txtSearch.AutoCompleteCustomSource = autoCompleteItems;
            System.Diagnostics.Debug.WriteLine("Done Returning " + autoCompleteItems.Count.ToString() + " items.");

      }

}

4

3 に答える 3

0

メイン UI スレッド内でのみ GUI を変更していることを確認するために、呼び出し内に次のtxtSearch.AutoCompleteCustomSource = autoCompleteItems行を挿入します。Invoke

Action<AutoCompleteStringCollection> action = items => txtSearch.AutoCompleteCustomSource = items;
Invoke(action, autoCompleteItems);
于 2012-08-20T13:00:37.097 に答える
0

関連する場合は、 Reactive Extensionsの典型的な例で自動提案します。

于 2012-08-20T15:06:17.037 に答える
0

Key_Down イベントで結果を更新する方法は次のとおりです。

http://www.codeproject.com/Articles/243368/AutoComplete-Textbox

于 2012-08-20T05:43:02.407 に答える