2009-10-29 71 views
0

我有一个列表框,其中的项目从数据库中加载,当用户在文本框中键入任何内容时,列表框应搜索输入的起始字符并显示它在文本框中。?在Winforms C中的文本框中输入时搜索列表框#

例如:

只要在文本框用户类型“A”,然后从开始的所有记录“A”应该显示在列表框。
当用户选择记录并按回车时,该记录应该输入到文本框中。
而且当用户从鼠标单击记录时,该记录应该输入到文本框中。

我不想使用文本框自动完成模式

如何在C#这样做吗?

在此先感谢

+0

这正是自动完成的用途。是否有一个原因,你*不想使用自动完成? – abhilash 2009-10-29 05:27:18

+0

@AB Kolan:AFAIK'ListBox'不支持任何类型的自动完成......您能否提出一种替代控制或方法? – jheddings 2009-11-06 23:51:34

回答

1

一个列表框本身不支持这种过滤行为开箱。最好的办法是自己进行过滤,每当文本框中的文本更改对数据源执行搜索并将结果提供给列表框时。

只要你的数据源(在这种情况下,数据库中的项目)不是巨大的,你可以通过缓存所有项目并进行内存中搜索来摆脱它。在启动时,获取所有项目,然后使用内存列表进行搜索。现在处理能力不是问题,但这一切都取决于你目前的状况。

我不知道你的数据源有多大是&你的架构/基础架构是什么,但是对数据库执行每次“增量”搜索可能不是最快的选择。速度对于这些过滤机制至关重要。

如果内存中的列表,或者每次都不可能访问数据库,那么Lucene.NET可能是最好的选择。 Lucene.NET被用来创建数据索引并对这些索引执行超快速搜索。缺点是你必须创建一个数据索引,并在数据源发生变化时保持最新状态,其优点是速度非常快。 (不开玩笑:)

链接Lucene.NET: http://incubator.apache.org/projects/lucene.net.html

1
int index = listbox.FindString(textbox.Text); 
if (0 <= index) 
{ 
    listbox.SelectedIndex = index; 
} 

编辑:MEH,答道基于标题的问题,不幸的是,相当自包含的,而不是实际的问题。请忽略...