首页 > 后端开发 > C++ > 如何在 C# 自动完成文本框功能中实现部分字符串匹配?

如何在 C# 自动完成文本框功能中实现部分字符串匹配?

Barbara Streisand
发布: 2024-12-30 22:04:14
原创
539 人浏览过

How Can I Implement Partial String Matching in C# AutoComplete TextBox Functionality?

C# 自动完成:TextBox 中的部分搜索功能

在 C# 中实现自动完成功能时,开发人员经常会遇到一个限制,即输入的字符串必须与中项目的开头匹配自动完成列表。换句话说,当前的实现仅支持前缀搜索。但是,如果您需要此功能更全面并允许部分匹配,例如按名字搜索而不是需要前缀号码,则默认的自动完成行为就不够了。

要克服此限制,需要可以通过重写 TextBox 控件的 OnTextChanged 事件来创建自定义自动完成功能。这可以根据用户的输入来控制过滤和显示建议的项目。

例如,可以在文本框的正下方添加一个列表框,最初是隐藏的,然后设置为在用户键入时显示匹配的项目。 TextBox 的 OnTextChanged 事件和 ListBox 的 SelectedIndexChanged 事件可用于显示和选择适当的自动完成结果。

下面是如何实现此自定义实现的基本示例:

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;
}
登录后复制

此代码演示了一个基本的自定义自动完成功能。只需最少的努力,就可以实现附加功能,例如动态调整 TextBox 文本和处理各种键盘输入。通过覆盖默认的自动完成行为,您可以更灵活地设计满足您特定要求的自定义解决方案。

以上是如何在 C# 自动完成文本框功能中实现部分字符串匹配?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板