Winform的ComboBox控件实现异步加载弹窗并搜索

combobox控件搜索功能相信有不少人做过,那么异步如何做呢?

        /// <summary>
        /// combobox搜索功能
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="cb">控件</param>
        /// <param name="valueMember">绑定value</param>
        /// <param name="displayMember">绑定显示值</param>
        /// <param name="func"></param>
        public async Task ComboBoxSearchText<T>(ComboBox cb, string valueMember, string displayMember, Func<string, IEnumerable<T>> func) where T : class, new()
        {
            if (func == null)
                return;
            Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
            string search = cb.Text.Trim();  //获取cb_material控件输入内
            //清空combobox
            cb.DataSource = null;
            cb.Items.Clear();
            cb.ValueMember = valueMember;
            cb.DisplayMember = displayMember;
            using (FmLoading fl = new FmLoading())
            {
                var dataTemp = ((Func<string, FmLoading, Task<IEnumerable<T>>>)(async (string txt, FmLoading f) =>
                 {
                     var result = await Task.Run(() =>
                     {
                         Thread.Sleep(500);
                         return func(txt);
                     });
                     f.Close();
                     return result;
                 })).Invoke(search, fl);
                fl.ShowDialog();

                cb.DataSource = (await dataTemp).ToList(); 
            }
            //设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
            cb.SelectionStart = cb.Text.Length;  // 设置光标位置,若不设置:光标位置始终保持在第一列,造成输入关键词的倒序排列
            //cb.Cursor = Cursors.Default; //保持鼠标指针原来状态,有时候鼠标指针会被下拉框覆盖,所以要进行一次设置
            cb.DroppedDown = true; // 自动弹出下拉框
            cb.MaxDropDownItems = 8; // 拉框最大数目
        }

调用如下:

效果

需要源码私聊

如果低版本的异步加载不支持async/await的话就看看

Winform异步加载数据弹窗等待效果_游子吟i的博客-优快云博客_winform 异步加载窗体

这篇文章,用BeginInvoke去做也可以,都简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值