C#下拉列表实现自动补全,我输入列表中部分内容就会列出相似的内容来供选择:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#下拉列表实现自动补全,我输入列表中部分内容就会列出相似的内容来供选择:相关的知识,希望对你有一定的参考价值。

我的代码只能实现列表项中输入第一个字找相关,第二个以后的就不行:
如列表值有,王老五,李小四,张三八
combox中输入张,光标会跳到张三八这项,可是如果输入“三”刚没反应...大侠出招吧!
SqlDataReader dr = com.ExecuteReader();
while (dr.Read())

comboBox1.Items.Add(dr["code".ToString()]);

dr.Close();
this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
还有就是有多项的时候,这个AutoCompleteSource不会自行排到前面:

奈何这个姓江的就不上来呢?

很明确的告诉你,是可以做的.使用ComboBox控件就可以了,简单说一下:

    首先设置属性DropDownStyle为DropDown

    其次设置AutoCompleteCustomeSource

    再设置AutoCompleteMode为Suggest或SuggesAppend

    再设置AutoCompleteSource为CustomeSource

就可以了,该控件不光可以实现这样的效果还可以自定义实现更为复杂的autocomplete效果

TxextBox也有该功能,区别在于ComboBox限定了输入值.

追问

AutoCompleteCustomeSource用的是默认设置:集合,不知道什么意思,没改;AutoCompleteSource设置为我上面的那个列表项ListItems就可以了。.
最后一句ComboBox限定的输入值是什么意思??

追答

集合,表明你要自动匹配的数据.这个可以必须填写也可以绑定.
ComboBox限定的输入值说的意思是你只能在下接框中选择(或输入同下拉框一样的)

追问

限定输入明白了,你提出来的跟你贴出来的效果是一样的,输入头一个字条是会出现相匹配的,可是如果只输入第二个字条,如图我输入的是“智”则匹配失败,有什么解决方法没?

追答

如果仅是匹配LISTITEM里面的的话,可以直接指定Autocompletesource为LISTITE
匹配不上来是因为,已经有一个默认匹配了,你可以使用键盘上下选择.
比如你输入江
就会默认给你选择江智山,如果还有江智勇什么的.你输入江智也可能只会出现江智山,因为已经匹配了,可以按键盘上下选择,
如果要更一步定制行为,你可以尝试使用自定义的数据源和代码编写指定匹配规则

参考技术A 首先Winform现在不做了,但是我知道要想实现你说的根据输入的字符来进行查找并显示,需要你对数据源进行操作。this.comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems; 这个肯定不可以。追问

winform不做了是什么意思?过时了?我做些公司内部小工具,不用winform你建议用什么好?

追答

我是说我好久没有开发winform了,现在的web比较流行,社会需求量大,但是各有优点。看你怎么看待了

参考技术B TIMER控件实时监控,在调用数据库输入的时候用正则表达式判断检索,嗯,差不多是这样。追问

用正则是可以的,就是我不知道怎么用...

C# 学习笔记(16)ComboBox下拉列表框宽度自适应

C# 学习笔记(16)ComboBox下拉列表框宽度自适应

当下拉列表框中内容宽度大于下拉列表框宽度时
在这里插入图片描述
下拉列表框不能将内容全部显示出来
在这里插入图片描述

可以在下拉时,对下拉列表框内容进行重绘
在这里插入图片描述

        /// <summary>
        /// 列表项下拉窗口宽度自适应
        /// </summary>
        /// <param name="comboBox"></param>
        private void AdjustComboBoxDropDownListWidth(object comboBox)
        {
            Graphics g = null;
            Font font = null;
            try
            {
                ComboBox senderComboBox = null;
                if (comboBox is ComboBox)
                    senderComboBox = (ComboBox)comboBox;
                else if (comboBox is ToolStripComboBox)
                    senderComboBox = ((ToolStripComboBox)comboBox).ComboBox;
                else
                    return;

                int width = senderComboBox.Width;
                g = senderComboBox.CreateGraphics();
                font = senderComboBox.Font;

                //checks if a scrollbar will be displayed.
                //If yes, then get its width to adjust the size of the drop down list.
                int vertScrollBarWidth =
                    (senderComboBox.Items.Count > senderComboBox.MaxDropDownItems)
                    ? SystemInformation.VerticalScrollBarWidth : 0;

                int newWidth;
                foreach (object s in senderComboBox.Items)  //Loop through list items and check size of each items.
                {
                    if (s != null)
                    {
                        newWidth = (int)g.MeasureString(s.ToString().Trim(), font).Width
                            + vertScrollBarWidth;
                        if (width < newWidth)
                            width = newWidth;   //set the width of the drop down list to the width of the largest item.
                    }
                }
                senderComboBox.DropDownWidth = width;
            }
            catch
            { }
            finally
            {
                if (g != null)
                    g.Dispose();
            }
        }
        private void comboBox1_DropDown(object sender, EventArgs e)
        {
            AdjustComboBoxDropDownListWidth(comboBox1);
        }

以上是关于C#下拉列表实现自动补全,我输入列表中部分内容就会列出相似的内容来供选择:的主要内容,如果未能解决你的问题,请参考以下文章

C#中combobox如何实现模糊查询,并能自动显示下拉列表

怎样才能让qt中的combobox不自动补全输入的内容

C# combobox 模糊搜索。

下拉列表内容怎么设置?

如何在输入元素“上方”显示下拉列表

WinForm中TextBox控件下拉列表问题