博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 实现ComboBox自动模糊匹配
阅读量:5841 次
发布时间:2019-06-18

本文共 1635 字,大约阅读时间需要 5 分钟。

ComboBox自带有属性可以实现自动匹配,但是它有一个弊端,只能从头开始匹配,例如"李四LS",只能输入“李四”或"李"才能匹配出来,而输入"LS"是找不出来的。

绑定到ComboBox的下拉选项中的后台数据:

string[] data = new string[] { "张三|ZS", "李四|LS", "王五|WW", "赵六|ZL", "田七|TQ" };

先展示如何通过AutoComplete实现自动匹配

comAutoSelect.Items.AddRange(data);comAutoSelect.AutoCompleteMode = AutoCompleteMode.SuggestAppend;comAutoSelect.AutoCompleteSource = AutoCompleteSource.ListItems;

这样,在前台输入"张三"会自动匹配出下拉选项"张三|ZS",输入"ZS",没有其他下拉选项。

手动绑定是通过TextUpdate来实现,这里也考虑过TextChanged事件来实现,但是TextChanged事件和DroppedDown = true,以及键盘的上下键选择有冲突,因此选用TextUpdate事件。

comAutoSelect.Items.AddRange(data);comAutoSelect.TextUpdate += (a, b) =>{    var input = comAutoSelect.Text.ToUpper();    comAutoSelect.Items.Clear();    if (string.IsNullOrWhiteSpace(input)) comAutoSelect.Items.AddRange(data);    else    {        var newList = data.Where(x => x.IndexOf(input, StringComparison.CurrentCultureIgnoreCase) != -1).ToArray();        comAutoSelect.Items.AddRange(newList);    }    comAutoSelect.Select(comAutoSelect.Text.Length, 0);    comAutoSelect.DroppedDown = true;    //保持鼠标指针形状      Cursor = Cursors.Default;};

主要的思路是当前台的文字改变时,刷新Items属性。有几个要注意。

1.不能用DataSource,因为绑定数据之后就不行对Items执行clear和add事件;另外,绑定数据后会默认选择第一行,如果需要输入多个字符,这样会产生全选,覆盖的输入效果。

2.在完成外Items的赋值后,执行comAutoSelect.Select(comAutoSelect.Text.Length, 0);将光标移到输入的最后,否则输入的文字会跟理想的字符串倒序。将光标移到最后可以用以下两种方法:

comAutoSelect.Select(comAutoSelect.Text.Length, 0);

comAutoSelect.SelectionStart = comAutoSelect.Text.Length;

3.可能对DroppedDown赋值的影响,光标被覆盖在界面下面了。需要增加一句Cursor = Cursors.Default;保持鼠标指针的形状。

TextUpdate的方法,实现了ComboBox模糊查找,自动匹配的效果。

文中的错漏,请回复纠正。

转载请注明出处:

转载于:https://www.cnblogs.com/icyJ/archive/2013/03/13/TextUpdate.html

你可能感兴趣的文章
outlook2013插件 VSTO开发与部署
查看>>
sql server 行列转换
查看>>
向页面添加富文本编辑器
查看>>
PHP学习笔记
查看>>
TCP 套接字函数
查看>>
常用正则表达式
查看>>
HDU 1210 Eddy's 洗牌问题
查看>>
qt qss
查看>>
C++调试函数的编写
查看>>
BOM
查看>>
cryptDB安装分析
查看>>
第一次作业
查看>>
Scanner--控制台输入
查看>>
java -jar 执行 eclipse export 的 jar 包报错处理
查看>>
跟我一起学XNA(2)让物体动起来②(附源码)
查看>>
大白话5分钟带你走进人工智能-第二节概率基础及高斯分布
查看>>
ajp方式整合,配置apache2.2 + tomcat6
查看>>
杂杂念
查看>>
MVC框架笔记
查看>>
Spark缓存策略
查看>>