【问题标题】:Find as you type in C#在 C# 中键入时查找
【发布时间】:2010-11-10 10:08:26
【问题描述】:

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

这里有没有人构建过类似的东西或有过实施类似的经验?

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

【问题讨论】:

  • 您说的是 Windows 窗体还是 Web 窗体,什么版本?
  • @JonSaunders 因为 firefox 是例子,我会假设 WinForms。

标签: c# .net


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    在我注意到 OP 编辑​​提到了 winforms 之后,我对删除这个感到犹豫不决,但我认为这对任何来这里寻找相同但 asp.net 应用程序的人来说都是有用的。


    只是因为还没有人提到它,对于网络表单应用程序,您绝对希望使用 ajax 来实现(.net 控件或纯 JS,您的选择)。该功能通常称为“自动完成”,您不希望它通过在页面级别进行服务器往返来破坏无缝性。

    我建议你看看thisthis

    【讨论】:

      【解决方案3】:

      不久前我为我的一个应用程序做了这样的事情。

      我所做的是在一个新线程中创建我的搜索功能,所以每次我输入一个新字母时,它都会在另一个线程中调用搜索功能,这样我就可以继续输入。

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

      【讨论】:

        【解决方案4】:

        之前有一次关于这个话题的讨论,作者得出结论认为你最好自己做这件事。

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

        【讨论】:

          【解决方案5】:

          我做了一些类似的事情,但更像是 iTunes® 搜索框,而不是 Awesomebar。我的控件使用文本框来主动过滤网格;所以它不是用于自动完成。

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

          【讨论】:

            【解决方案6】:

            您需要为您的文本输入字段处理 TextChanged 事件,并且当文本更改时,启动一个运行的新线程,该线程将应用新的搜索。如果文本在您返回结果之前发生更改,请终止该线程。如果线程及时返回结果,显示出来。

            您可以稍微更高级一些(例如,在文本更改后等待一小段时间,以便用户可以键入一个单词而不会触发大量无用线程),但基本上就是这样。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2015-07-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2014-12-06
              • 2012-01-08
              相关资源
              最近更新 更多