zoukankan      html  css  js  c++  java
  • c# 实现ComboBox自动模糊匹配

    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模糊查找,自动匹配的效果。

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

    转载请注明出处:http://www.cnblogs.com/icyJ

  • 相关阅读:
    YUM安装(卸载)KDE和GNOME
    shutdown
    linux运行级别
    [root@localhost ~]#各项解释
    常用服务端口号
    部分命令技巧
    网卡配置文件
    《移动端支付系统如何设计有效地防重失效机制?》阅读心得
    软件开发第三天(记录)
    软件开发第二天(记录)
  • 原文地址:https://www.cnblogs.com/icyJ/p/TextUpdate.html
Copyright © 2011-2022 走看看