为了方便用户输入数据时,能模糊匹配到想要的数据,提高输入效率,我们往往会专门开发一个选择控件,定位到输入下方,来动态匹配用户的输入项,以提高效率,但专门自定义开发,会比较费时费力,在要求不高的一些小项目中,我们可以使用控件内置的自动匹配方法来实现这个需求
相关的属性就是
AutoCompleteSource 
AutoCompleteMode 

AutoCompleteCustomSource

1:AutoCompleteSource

这个属性就是设置自动匹配数据的来源类型,有以下几个选项,如使用ComboxBox,还会多一个ListItems项
一般用在Textbox中时,使用CustomSource比较多,。

2:AutoCompleteMode 

这个是设置匹配方法,有Suggest,Append,SuggestAppend三种方式,
Suggest:会下拉列表,供选择
Append:会直接在控件中显示匹配项,
SuggestAppend:上面二者的合并,即会下拉列表,也会直接在控件中显示匹配项

3:AutoCompleteCustomSource

当第一项选择CustomSource时,就会需要使用此属性来导入自定义的匹配源,匹配源可以提前或实时导入,一般在可选数据项较多时,可以考虑实时导入接近的匹配项,而不用全部导入
当然,数据源可以使用任何的存储对像,我使用了配置文件作为匹配源,实现了一个简单的方案
//导入匹配数据项
SuccessFailResult loadCompleteCustomSource()
        {
            xProductName.AutoCompleteCustomSource.Clear();
            //导入常用投料罐名作匹配
            var pEnumer = Properties.Settings.Default.cTankList.GetEnumerator();
            while (pEnumer.MoveNext())
            {
                xProductName.AutoCompleteCustomSource.Add(pEnumer.Current);
            }
            return SuccessFailResult.mSuccess;
        }
我这里还采用了动态保存数据源的方式,来动态增加新的用户输入项
        SuccessFailResult saveCompleteCustomSource(string pNewName)
        {
            if(string.IsNullOrWhiteSpace(pNewName))
            {
                return SuccessFailResult.mDoNothing;
            }
            if(Properties.Settings.Default.cTankList.Contains(pNewName))
            {
                return SuccessFailResult.mDoNothing;
            }
            Properties.Settings.Default.cTankList.Add(pNewName);
            Properties.Settings.Default.Save();
            loadCompleteCustomSource();         //重新导入一次
            return SuccessFailResult.mSuccess;
        }
实现效果如下:
注意,这个方案只能实现从左到右的简单匹配,所以在要求不高的小项目中使用还是非常方便的