在键入C#时查找

我试图模仿FireFox中的地址栏(“棒棒”)中的“找到你键入”function。 我想在文本框下方显示一个建议框,并且建议框包含包含文本框中内容的字符串。 我查看了普通WinForms文本框的自动完成function,但它似乎只搜索字符串的开头。

有没有人在这里建立或有经验实现这样的事情?

编辑:一些澄清 – 这是一个WinForms项目。 它需要在字符串内搜索,而不仅仅是开头(如果我没记错的话,这就是普通文本框所做的)。 建议应显示在弹出窗口中,如文本框自动完成。

您需要为文本输入字段处理TextChanged事件,并且当文本更改时,启动将运行将应用新搜索的新线程。 如果在返回结果之前文本发生了变化,那么就直接杀死该线程。 如果线程及时返回结果,则显示它们。

您可以稍微提高一点(例如,在文本更改后等待很短的时间,以便用户可以在不触发大量无用线程的情况下键入单词)但基本上就是这样。

之前有一个关于这个主题的讨论,作者总结说你最好自己做整件事。

如何在C#combobox或文本框中动态更改自动完成条目?

我做了一些模糊的东西,但更像是iTunes®搜索框而不是Awesomebar。 我的控件使用文本框来主动过滤网格; 所以它不适合自动完成。

…但是…基本上我有一个所有符合条件的项目的DataView,每当TextBox的文本发生变化时,我都会更新filter以隐藏所有不匹配的项目。 它运行良好,可能适合您过滤数据的需求 – 但不知道如何将其用作文本框的自动完成源。

我不是很久以前为我的应用程序做过这样的事情。

我所做的是在一个新线程中使我的搜索function,所以每次我输入一个新的字母,它在另一个线程中调用搜索function,所以我可以继续打字。

如果需要,我可以发布一些代码,但这应该足以让你入门。 🙂

在我注意到OP编辑提到了winforms之后,我已经羞愧并且不喜欢删除它,但我认为对于那些来到这里寻找相同但是对于asp.net应用程序的人来说这将是有用的。


仅仅因为没有人提到它,对于webforms应用程序,你绝对用ajax (.net控件或纯JS,你的选择) 来做这件事 。 该function通常被称为“自动完成”,并且您不希望它通过在页面级别进行服务器往返来破坏无缝性。

我建议你看看这个和这个 。

我在C#中使用了搜索键 , 如何在KeyUp上创建文本框回发?

基本上,您使用keyup操作将附加到触发器的回发调用到更新面板。 然后使用dataview或者后端的任何内容在textbox_changed事件中进行更新。