工作项目需要,需要一个通用的自动完成控件;比如支持在TextBox控件和DataGridView控件,重要的是,需要AutoComplete控件能多列显示数据,并能多选单选的功能,支持多种方式操作,比如回车选定,上下键移动等等,还要求可轻易的移植到其他项目中使用。于是,感谢伟大的google和伟大的cnblogs,经过两天学习,做了这个AutoCompleteCtrls控件。
在研究过程中发现,如果想做到一个控件能支持TextBox和DataGridView,是很复杂的,需要很多映射和判断,做出来的代码也相当复杂,可读性差,干脆,抽象出来个基类,然后再抽象积累中泛化实现对应的AutoComplete控件;下面是和同事分享的PPT概要,和大家分享一下--下面的图都是临时画的,可能不是很准确,能看懂就行:)——;
1) AutoComplete控件的实现要求
n实时捕捉控件的键盘事件,并对事件作出响应的动作;
n能通过多种方式完成选择数据,并能通知系统完成事件;
n根据用户输入的信息,快速过滤出有效数据;
n根据应用场景需要,精确显示到响应位置;
n控件要和业务数据无关性,可移植性,通用性;
n使用简单方便,应用时尽量少做编程;
n可配置性,可扩展性;
2)AutoComplete控件原型分析
3)AutoComplete控件实现时序图
4)抽象基类图
5)泛化实例图
6)抽象基类的实现
7)开发要点
通过对基类高度的封装,泛化类只需要实现AddListen方法和对应控件的KeyUP方法即可;选择完成后,通过委托事件OnCompleteFilter通知调用者,并将选取结果值以DataTable的方式返回,然后该怎么处理就这么处理了;
下篇再叙述两个泛化类 AutoCompleteForTextBox和AutoComplateFOrDataGridView的实现,以及实际应用;