首页 >后端开发 >C++ >如何在 C# 中实现前缀匹配之外的灵活自动完成功能?

如何在 C# 中实现前缀匹配之外的灵活自动完成功能?

Barbara Streisand
Barbara Streisand原创
2025-01-01 06:41:09311浏览

How to Implement Flexible AutoComplete Functionality Beyond Prefix Matching in C#?

为 C 实现灵活的自动完成

在 C# 中,向文本框添加自动完成功能时,现有解决方案仅允许基于前缀进行搜索。为了克服此限制并启用更灵活的搜索选项,需要自定义实现。

一种方法是重写 OnTextChanged 事件并实现自定义自动完成逻辑。这可以通过在文本框下方创建一个列表视图并根据用户输入动态填充它来实现。

例如,这是一个基本实现:

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;
}

这种方法允许您搜索项目,无论其在字符串中的位置如何。您可以通过添加附加功能(例如文本附加、捕获键盘命令等)来进一步增强实现。

以上是如何在 C# 中实现前缀匹配之外的灵活自动完成功能?的详细内容。更多信息请关注PHP中文网其他相关文章!

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