winform combox 下拉搜索

private void AddDatingForm_Load(object sender, EventArgs e)
        { 
NameValueCollection nvcol = new NameValueCollection();
            nvcol.Add("UserPhone", "");
            string url = string.Format("{0}{1}", datingInterfaceUrl, MethodNames.GetUserInfo2);
           
            json = HttpWebResponseUtility.HttpPost(nvcol, url);
            var userInfo = JsonHelper.DeserializeObject<Response<List<UserObj>>>(json);

            if (userInfo.isError != "True")
            {

                comboBox1.Items.AddRange(userInfo.Result.ToArray());
                comboBox1.DisplayMember = "USERNO";
                comboBox1.ValueMember = "USERID";
                userList = userInfo.Result; ;
                comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
                comboBox1.SelectedIndex = -1;
                comboBox1.TextChanged += comboBox1_TextChanged;
            }
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            ComboBox combo = sender as ComboBox;
            if (combo.SelectedIndex == -1)
            {
                txtName.Text = "";
                txtUserOu.Text = "";
                return;
            }
            else
            {
                UserObj tv = combo.SelectedItem as UserObj;
                if (tv != null)
                {
                    txtName.Text = tv.USERNAME;
                    txtUserOu.Text = tv.OU;
                }
                else
                {
                    txtName.Text = "";
                    txtUserOu.Text = "";
                }
            }
        }

 private void comboBox1_TextChanged(object sender, EventArgs e)
        {
            ComboBox comboBox = sender as ComboBox;
            if (comboBox.SelectedIndex == -1)
            {
                comboBox.TextChanged -= comboBox1_TextChanged;
                comboBox.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;
                string search = comboBox.Text.Trim();
                var newSource = userList.Where(p => p.USERNO.Contains(search)).ToList();
                comboBox.DataSource = newSource;
                comboBox.SelectedIndex = -1;
                comboBox.DropDownHeight = 200;
                comboBox.DroppedDown = true;
                comboBox.Text = search;
                comboBox.SelectionStart = search.Length;
                Cursor = Cursors.Default;
                comboBox.TextChanged += comboBox1_TextChanged;
                comboBox.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
            }
        }

重写combobox

public partial class ComboBoxEx : ComboBox
    {
        public event EventHandler NoSelectItem;
        public ComboBoxEx()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
        }
        protected override void WndProc(ref Message m)
        {
            //Console.WriteLine(m.LParam);
            //if (this.SelectedIndex == 0 && this.Items.Count == 0)
            //    return;
            try
            {
                base.WndProc(ref m);
            }
            catch (ArgumentOutOfRangeException e)
            {
                if (this.SelectedIndex == 0 && this.Items.Count == 0)
                {
                    if (NoSelectItem != null)
                        NoSelectItem(this, new EventArgs());
                    return;
                }

                else
                    throw;
            }
        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在WinForm中,ComboBox默认是单选的,即用户只能选择其中的一个选项。要实现多选的ComboBox,可以借助CheckListBox控件来实现。 首先,将ComboBox控件拖放到Windows窗体中,在属性窗口中找到DropDownStyle属性,将其设置为DropDownList。然后,在工具箱中找到CheckListBox控件,并拖放到窗体中。 接下来,利用代码将CheckListBox控件与ComboBox控件绑定起来。首先,定义一个List<string>类型的变量,用于存储用户选择的多个选项。然后,使用ComboBox的SelectedIndexChanged事件和CheckListBox的ItemCheck事件来实现多选功能。 在ComboBox的SelectedIndexChanged事件中,使用foreach循环遍历CheckListBox的每个项,使用SetItemChecked方法设置每个项的选中状态。在CheckedListBox的ItemCheck事件中,通过判断项的选中状态,将选中的项添加到List<string>变量中或从中移除。 最后,可以使用ListBox的SelectedItems属性来获取用户选择的多个选项。 总之,实现WinFormComboBox的多选功能,可以借助CheckListBox控件,并通过代码来实现选中状态的改变和获取多个选项的功能。 ### 回答2: Winform中的ComboBox控件默认是单选的,但可以通过一些技巧实现多选功能。 方法一:使用CheckedListBox控件 可以将ComboBox替换为CheckedListBox控件,CheckedListBox允许用户选择多个选项。可以通过以下步骤实现: 1. 将ComboBox控件替换为CheckedListBox控件; 2. 设置CheckedListBox的SelectionMode属性为SelectionMode.MultiExtended,允许多个连续选项的选择; 3. 当用户选择的选项发生变化时,可以通过CheckedItems属性获取选择的选项集合。 方法二:自定义ComboBox 可以利用ComboBox的DropDown事件和自定义UI来实现多选功能。 1. 在DropDown事件中,获取ComboBox的DropDown控件(DropDown属性获取); 2. 在DropDown控件中,添加一个Panel容器,并设置其AutoScroll为true,用于显示多个选项; 3. 在Panel中添加多个CheckBox控件,每个CheckBox对应一个选项,并添加相应的事件处理; 4. 通过事件处理逻辑,实现多选操作,并记录所选的选项。 需要注意的是,无论是使用CheckedListBox还是自定义ComboBox,都需要在处理选择变化的事件中编写相应的业务逻辑,以便将选择的选项应用到实际的功能中。 总结: 无论是使用CheckedListBox还是自定义ComboBox控件,都可以实现Winform中的ComboBox多选功能。具体选用哪种方法取决于实际需求和UI要求。 ### 回答3: WinForm中的ComboBox控件默认是单选的,不支持多选功能。然而,我们可以通过一些方法实现ComboBox的多选功能。 一种常见的方法是自定义ComboBox控件。我们可以继承自ComboBox类,并重写一些方法来实现多选功能。例如,我们可以重写OnDropDown事件,在下拉框展开时显示多个选项,并在点击某个选项时改变其选中状态。还可以重写OnDropDownClosed事件,在下拉框关闭时获取所有选中的选项,并更新ComboBox的文本显示。这样,用户就可以通过勾选多个选项实现多选功能了。 另一种方法是使用CheckedListBox控件替代ComboBox控件。CheckedListBox是一个支持多选的列表控件,可以在其中显示多个选项并允许用户勾选多个选项。我们可以将CheckedListBox放置在一个弹出窗口中,当用户点击ComboBox下拉按钮时,弹出该窗口,显示所有选项,并允许用户选择多个选项。选择完成后,我们可以根据用户的选择更新ComboBox的文本显示。 无论是哪种方法,我们都需要在代码中处理用户的选择,并根据选择结果进行相应的操作。例如,我们可以遍历选中的选项,获取其值并执行相应的操作,如更新其他控件的状态、过滤数据等。 总之,实现ComboBox的多选功能需要借助一些额外的控件或自定义代码来实现,通过处理用户选择的操作来达到多选的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值