问题:
正在为文本框实现自动完成功能,其中结果来自格式为“[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中文网其他相关文章!