如何通过输入文字缩小comboBox中的选项列表-增量搜索

48

我有一个下拉框,其中有数百个选项。用户必须能够在下拉框中输入文本。当用户输入文本时,以该输入值开头的项目必须被选择或列出。用户必须能够连续输入。我的ComboBox DropDownStyle是DropDownList。

例如:在通过输入选择下拉框中的名称时,它只允许一个字母。因此,如果我键入“A”,它将跳转到以“A”开头的第一个字母。当我连续输入时,下拉框选择的项目根据当前按键而改变。如果我按“As”,下拉框会查看以“s”开头的项目。


1
将DropDownStyle设置为“DropDown”。 - Dan
1
...和AutoCompleteStyle 'Suggest' - Dan
不清楚您是否希望下拉框在输入"A"后跳转到以"S"开头的选项,或者这是当前的工作方式,您希望它改为跳转到以"As"开头的选项。如果您想要后者(在输入"As"后跳转到"As"),则称之为“增量搜索”。 - TylerH
2个回答

94
comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDown;
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

3
您也可以使用 DropDownListDropDownStyle 和这些自动完成选项来实现此功能 - 只是它不会明确地向用户显示他们到目前为止键入的关键字。但是,当您想要保持 ComboBox.Items 不可变时,这很有用。 - Derek W
7
在设置模式之前,您应该先设置源,否则会引发NotSupportedException。这样做后,它将完美地运行。 - Gaeburider
4
这被称作“增量式组合框搜索”,供您参考。 - Baz Guvenkaya
1
如果您使用DropDownList作为DropDownStyle,那么您需要相对较快地输入后续字母以继续过滤。您不能先输入第一个字母,然后看一下再思考,再输入第二个字母。否则,组合框将把第二个字母视为全新搜索的开始。 - Girl Spider

-2
您需要连接到TextChanged事件。当文本发生更改时,使用DataView过滤列表,并获取第一个结果的文本,将组合框的文本设置为该文本。当然,在处理程序中必须进行检查,以确定是否处理事件(更改文本时,将触发另一个TextChanged事件)。当然,您还希望突出显示他们输入的文本,并将插入符号放在适当的位置。

你的方法过于复杂了。 - reformed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接