問題:
正在為文字方塊實作自動完成功能,其中結果來自格式為「[001] Last, First Middle」的資料庫。目前的實現需要輸入“[001]”來啟動搜索,即使所需的行為是允許基於輸入名字的自動完成,例如“John”應該返回“[001] Smith,John D.”
解決方案:
C# 中內建的自動完成功能僅支援基於前綴的搜索,這使得不適合這個要求。解決方法是透過處理 OnTextChanged 事件並以程式設計方式實現所需的行為來建立自訂自動完成函數。
實作:
在文字方塊及其下方新增一個列錶框可見性最初設定為 false。當使用者在文字方塊中輸入文字時,會觸發文字方塊的OnTextChanged 事件。此處理程序執行下列步驟:
當選擇列錶框中的某個項目時,會觸發列錶框的 SelectedIndexChanged 事件,並將所選項目的文字顯示為複製到文字方塊的文字屬性中。這完成了自動完成過程並隱藏了列錶框。
程式碼範例:
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中文網其他相關文章!