C# 在WinC窗体中键入文本框时搜索列表框#

C# 在WinC窗体中键入文本框时搜索列表框#,c#,winforms,text,listbox,C#,Winforms,Text,Listbox,我有一个列表框,其中项目是从数据库加载的,当用户在文本框中键入任何内容时,列表框应该搜索输入的起始字符并在文本框中显示 例如: 用户在文本框中键入“A”后,列表框中应显示以“A”开头的所有记录。 当用户选择记录并按enter键时,应在文本框中输入该记录。 而且,当用户从鼠标单击记录时,该记录应该输入到文本框中 我不想使用文本框自动完成模式 如何在C#中执行此操作 提前感谢列表框本身不支持这种开箱即用的过滤行为。您最好自己进行过滤,每次文本框中的文本更改都会对数据源执行搜索,并将结果提供给列表框

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

例如:

用户在文本框中键入“A”后,列表框中应显示以“A”开头的所有记录。
当用户选择记录并按enter键时,应在文本框中输入该记录。
而且,当用户从鼠标单击记录时,该记录应该输入到文本框中

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

如何在C#中执行此操作


提前感谢

列表框本身不支持这种开箱即用的过滤行为。您最好自己进行过滤,每次文本框中的文本更改都会对数据源执行搜索,并将结果提供给列表框

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

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

如果内存中的列表,或者每次都不去数据库,那么Lucene.NET可能是性能最好的选项。Lucene.NET可以创建数据索引,并对这些索引执行超快速搜索。不利的一面是,当您的数据源发生变化时,您必须创建数据索引并使其保持最新,有利的一面是它的速度快得令人难以置信。(不是开玩笑:)

链接到Lucene.NET:
int index=listbox.FindString(textbox.Text);

如果(0)这正是自动完成的用途。您不想使用自动完成有什么原因吗?@AB Kolan:AFAIK
ListBox
不支持任何类型的自动完成…您能建议一种替代控件或方法吗?
int index = listbox.FindString(textbox.Text);
if (0 <= index)
{
    listbox.SelectedIndex = index;
}