首页 >后端开发 >C++ >如何使用自定义事件处理程序在 C# 中实现自定义自动完成?

如何使用自定义事件处理程序在 C# 中实现自定义自动完成?

Barbara Streisand
Barbara Streisand原创
2024-12-31 17:50:10655浏览

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 事件并以编程方式实现所需的行为来创建自定义自动完成函数。

实现:

在文本框及其下方添加一个列表框可见性最初设置为 false。当用户在文本框中输入文本时,会触发文本框的OnTextChanged 事件。该处理程序执行以下步骤:

  1. 清除列表框中的现有项目。
  2. 如果文本框的文本为空,则隐藏列表框。
  3. 迭代文本框的 AutoCompleteCustomSource 中的值。
  4. 如果值包含在textbox,将值添加到列表框并将其可见性设置为 true。

当选择列表框中的某个项目时,会触发列表框的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn