现有的自动完成功能仅支持按前缀搜索。似乎没有任何体面的方法可以覆盖此行为。
有些人通过覆盖
OnTextChanged事件实现了自己的自动完成功能。那可能是您最好的选择。
例如,您可以在的
ListBox下方添加一个
TextBox,并将其默认可见性设置为false。然后你可以使用
OnTextChanged的事件
TextBox和
SelectedIndexChanged的情况下
ListBox,以显示和选择项目。
作为一个简单的例子,这似乎工作得很好:
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;}您无需付出太多努力就可以做更多的事情:将文本追加到文本框中,捕获其他键盘命令,等等。



