首页 >后端开发 >C++ >除了仅前缀匹配之外,如何在 C# 中实现全字符串搜索自动完成?

除了仅前缀匹配之外,如何在 C# 中实现全字符串搜索自动完成?

Patricia Arquette
Patricia Arquette原创
2024-12-30 04:45:44168浏览

How Can I Implement a Full-String Search Autocomplete in C# Beyond Prefix-Only Matching?

使用自定义逻辑克服 C# 自动完成中仅前缀搜索的限制

尽管内置 C# 自动完成功能存在限制,但这是可能的实现自定义自动完成解决方案,允许您根据字符串的任何部分搜索结果。当提供不完整或部分信息作为输入时,这特别有用。

自定义自动完成技术

C# 中的标准自动完成功能仅在前缀搜索模式下运行,这意味着它只能查找以输入文本开头的匹配项。为了克服这个问题,您可以通过重写 OnTextChanged 等事件来实现自己的自动完成逻辑。

示例实现

实现自定义自动完成的有效方法是使用 ListBox显示潜在的匹配项。以下是修改后的代码片段:

// Initialize list box
listBox1.Visible = false;
listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged;
listBox1.LostFocus += listBox1_LostFocus;

// Handle text changes in the text box
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))
        {
            listBox1.Items.Add(s);
            listBox1.Visible = true;
        }
    }
}

// Hide the list box on selection
void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
    textBox1.Text = listBox1.Items[listBox1.SelectedIndex].ToString();
    hideResults();
}

// Hide the list box when it loses focus
void listBox1_LostFocus(object sender, System.EventArgs e)
{
    hideResults();
}

// Hide the list box
void hideResults()
{
    listBox1.Visible = false;
}

增强

示例中提供的自定义自动完成解决方案可以通过添加更多功能来进一步增强,例如:

  • 将匹配的文本附加到文本框
  • 捕获其他内容键盘命令

以上是除了仅前缀匹配之外,如何在 C# 中实现全字符串搜索自动完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

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