ホームページ >バックエンド開発 >C++ >カスタム イベント ハンドラーを使用して C# でカスタム オートコンプリートを実装する方法

カスタム イベント ハンドラーを使用して C# でカスタム オートコンプリートを実装する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-12-31 17:50:10656ブラウズ

How to Implement Custom Autocomplete in C# Using a Custom Event Handler?

カスタム イベント ハンドラーを使用した C# オートコンプリート

問題:

オートコンプリート機能がテキストボックスに実装されており、結果が「[001] Last, First Middle」形式のデータベースから取得されます。現在の実装では、検索を開始するには「[001]」と入力する必要がありますが、望ましい動作は名の入力に基づいてオートコンプリートを許可することです。たとえば、「John」は「[001] Smith, John D.」を返す必要があります。

解決策:

C# の組み込みオートコンプリート機能は、プレフィックスベースの検索のみをサポートしているため、この要件には不向きです。回避策は、OnTextChanged イベントを処理し、目的の動作をプログラムで実装することにより、カスタム オートコンプリート関数を作成することです。

実装:

テキスト ボックスとその下に ListBox が追加されます。可視性は最初は false に設定されます。ユーザーがテキストボックスにテキストを入力すると、テキストボックスの OnTextChanged イベントがトリガーされます。ハンドラーは次の手順を実行します。

  1. リストボックス内の既存の項目をクリアします。
  2. テキストボックスのテキストが空の場合、リストボックスを非表示にします。
  3. テキストボックスの AutoCompleteCustomSource の値。
  4. 値に入力されたテキストが含まれる場合

リストボックス内の項目が選択されると、リストボックスの SelectedIndexChanged イベントがトリガーされ、選択された項目のテキストが表示されます。テキストボックスの text プロパティにコピーされます。これでオートコンプリート プロセスが完了し、リストボックスが非表示になります。

コード例:

private void textBox1_TextChanged(object sender, System.EventArgs e)
{
    listBox1.Items.Clear();
    if (textBox1.Text.Length == 0)
    {
        hideResults();
        return;
    }

    foreach (String s in textBox1.AutoCompleteCustomSource)
    {
        if (s.Contains(textBox1.Text))
        {
            Console.WriteLine("Found text in: " + s);
            listBox1.Items.Add(s);
            listBox1.Visible = true;
        }
    }
}

void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
    hideResults();
}

void hideResults()
{
    listBox1.Visible = false;
}

このソリューションは、さらに強化できるカスタム オートコンプリート機能の基本的な例を提供します。特定の要件に基づいて。ただし、テキスト入力を処理し、推奨値のリストを動的に更新する原理を示しています。

以上がカスタム イベント ハンドラーを使用して C# でカスタム オートコンプリートを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。