C# でオートコンプリート機能を実装する場合、開発者は、入力された文字列がテキスト ボックスの項目の先頭と一致する必要があるという制限に遭遇することがよくあります。オートコンプリートリスト。つまり、現在の実装ではプレフィックス検索のみがサポートされています。ただし、この機能をより包括的にし、プレフィックス番号を必要とする代わりに名で検索するなど、部分一致を許可する必要がある場合は、デフォルトのオートコンプリート動作では不十分になります。
この制限を克服するには、次のようにします。 TextBox コントロールの OnTextChanged イベントをオーバーライドすることで、カスタム オートコンプリート関数を作成できます。これにより、ユーザーの入力に基づいて提案された項目のフィルタリングと表示を制御できるようになります。
たとえば、ListBox を TextBox のすぐ下に追加し、最初は非表示にし、ユーザーの入力に応じて一致する項目を表示するように設定できます。 TextBox の OnTextChanged イベントと ListBox の SelectedIndexChanged イベントを使用して、適切なオートコンプリート結果を表示および選択できます。
以下は、このカスタム実装を実現する方法の基本的な例です。
public Form1() { InitializeComponent(); acsc = new AutoCompleteStringCollection(); textBox1.AutoCompleteCustomSource = acsc; textBox1.AutoCompleteMode = AutoCompleteMode.None; textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; } private void button1_Click(object sender, EventArgs e) { acsc.Add("[001] some kind of item"); acsc.Add("[002] some other item"); acsc.Add("[003] an orange"); acsc.Add("[004] i like pickles"); } 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 listBox1_LostFocus(object sender, System.EventArgs e) { hideResults(); } void hideResults() { listBox1.Visible = false; }
このコードは、基本的なカスタム オートコンプリート関数を示しています。最小限の労力で、TextBox テキストの動的調整やさまざまなキーボード入力の処理などの追加機能を実装できます。デフォルトのオートコンプリート動作をオーバーライドすることで、特定の要件を満たすカスタム ソリューションをより柔軟に設計できるようになります。
以上がC# の AutoComplete TextBox 機能で部分文字列一致を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。