在键入C#时查找

时间:2009-07-13 19:00:23

标签: c# .net

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

有没有人在这里建立或有实施这样的经验?

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

6 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:2)

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

How can I dynamically change auto complete entries in a C# combobox or textbox?

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

我已经为我的应用做了这样的事情,不是很久以前。

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

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

答案 4 :(得分:0)

在我注意到OP编辑提到winforms之后,对于删除此内容感到羞愧和憎恨,但我认为对于那些来这里寻找相同但是对于asp.net应用程序的人来说这将是有用的。 < / p>


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

我建议您查看thisthis

答案 5 :(得分:0)

我使用了Search As You Type in C#How do I make a Textbox Postback on KeyUp?

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