c#下拉框自己实现搜索实现优先级排序匹配

2025-05-12  本文已影响0人  吉凶以情迁

c#自带了自动完成,但是不咋好用,匹配搜索功能很弱,只支持匹配开始。

      private void comboBox_TextChanged(object sender, EventArgs e)
        {


            Debug.WriteLine("sender" + sender);

            string keyword = comboBox.Text.Trim();
            if (string.IsNullOrEmpty(keyword)) {
          
                comboBox.Items.Clear();
                comboBox.Items.AddRange(allData.ToArray());
                comboBox.DroppedDown = true;
                return;
            }



            if (comboBox.SelectedItem != null &&
     comboBox.Text == comboBox.SelectedItem.ToString()) {
                Debug.WriteLine("sender,重复 忽略" + sender);
                return;
            }

            /
            var filtered = allData
                .Where(item => item.IndexOf(keyword, StringComparison.OrdinalIgnoreCase) >= 0)
                .OrderBy(item => {
                    if (item.StartsWith(keyword, StringComparison.OrdinalIgnoreCase)) return 0;
                    if (item.EndsWith(keyword, StringComparison.OrdinalIgnoreCase)) return 1;
                    return 2;
                })
                .ThenBy(item => item.Length)
                .ToList();
            comboBox.Items.AddRange(allData.ToArray());
            if (filtered.Count > 0) {
                comboBox.Items.Clear();
                comboBox.Items.AddRange(filtered.ToArray());
                comboBox.Select(comboBox.Text.Length ,1);
                comboBox.DroppedDown = true;

            }
            else {


                comboBox.Select(comboBox.Text.Length - 1, 1);
                comboBox.DroppedDown = false;
            }


        }

上一篇 下一篇

猜你喜欢

热点阅读