在 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中文网其他相关文章!