如何解决如何获取自动完成功能,不仅要搜索其开头,还要使用包含,例如包含“门”
使用自动完成功能,您可以搜索开头,并且效果很好。但是,搜索到的字符串并不总是以您要查找的字符串开头。例如,从我添加的包含字符串的字典中。
门打开元件
外门
内门
推拉门
仅门的打开元素从自动完成搜索中返回。
这是我用来填充自动完成功能的代码...
Dictionary<string,string> items = KN_File.CreateDictFromTextFile(filePath);
List<string> treeBasedList = new List<string>();
foreach (KeyValuePair<string,string> kvp in items)
{
treeBasedList.Add(kvp.Value + "," + kvp.Key);
}
AutoCompleteStringCollection AutoCompleteList = new AutoCompleteStringCollection();
AutoCompleteList.AddRange(treeBasedList.ToArray());
comboBx.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBx.AutoCompleteSource = AutoCompleteSource.CustomSource;
comboBx.AutoCompleteCustomSource = AutoCompleteList;
解决方法
这是您可以参考的解决方法。
private void Form1_Load(object sender,EventArgs e)
{
listOriginal.Add("Doors opening elements");
listOriginal.Add("exterior doors");
listOriginal.Add("interior doors");
listOriginal.Add("sliding doors");
this.comboBx.Items.AddRange(listOriginal.ToArray());
}
// Bind default keywords
List<string> listOriginal = new List<string>();
// save new keywords
List<string> listNew = new List<string>();
private void comboBx_TextUpdate(object sender,EventArgs e)
{
//clear combobox
this.comboBx.Items.Clear();
//clear listNew
listNew.Clear();
foreach (var item in listOriginal)
{
// call ToLower() .. not case sensitive
if (item.ToLower().Contains(this.comboBx.Text))
{
//add to ListNew
listNew.Add(item);
}
}
this.comboBx.Items.AddRange(listNew.ToArray());
this.comboBx.SelectionStart = this.comboBx.Text.Length;
Cursor = Cursors.Default;
// Automatically pop up drop-down
this.comboBx.DroppedDown = true;
}
测试结果,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。