标签: autocomplete

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

我在C#中有一个组合框,我想用它来使用自动完成建议,但是我希望能够在用户输入时更改自动完成条目,因为可能的有效条目太多而无法AutoCompleteStringCollection在启动时填充.

例如,假设我让用户输入名称.我有一个可能的名字列表("乔","约翰")和一个姓氏列表("博客","史密斯"),但如果我有一千个,那么这将是一百万个可能的字符串 - 太多,无法输入自动完成条目.所以最初我想只有名字作为建议("乔","约翰"),然后一旦用户键入了第一个名字("乔"),我想删除现有的自动完成条目并替换他们使用一个新的集合,包括所选的名字,然后是可能的姓氏("Joe Bloggs","Joe Smith").为此,我尝试了以下代码:

void InitializeComboBox()
{
    ComboName.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
    ComboName.AutoCompleteSource = AutoCompleteSource.CustomSource;
    ComboName.AutoCompleteCustomSource = new AutoCompleteStringCollection();
    ComboName.TextChanged += new EventHandler( ComboName_TextChanged );
}

void ComboName_TextChanged( object sender, EventArgs e )
{
    string text = this.ComboName.Text;
    string[] suggestions = GetNameSuggestions( text );

    this.ComboQuery.AutoCompleteCustomSource.Clear();
    this.ComboQuery.AutoCompleteCustomSource.AddRange( suggestions );
}
Run Code Online (Sandbox Code Playgroud)

但是,这不能正常工作.似乎对Clear()的调用导致自动完成机制"关闭",直到组合框中出现下一个字符,但是当下一个字符出现时,上面的代码再次调用Clear(),所以用户从不实际上看到了自动完成功能.它还会导致组合框的全部内容被选中,因此在每个按键之间您必须取消选择现有文本,这使其无法使用.如果我删除对Clear()的调用,则自动完成有效,但似乎AddRange()调用无效,因为我添加的新建议未出现在自动完成下拉列表中.

我一直在寻找解决方案,并看到了各种建议,但我无法使其中任何一个工作 - 自动完成功能显示为禁用,或新的字符串不显示.这是我尝试的一系列事项:

  • BeginUpdate()在更改字符串之前调用,EndUpdate()之后调用.
  • 调用Remove()所有现有字符串而不是Clear().
  • 在更新字符串时清除组合框中的文本,然后将其添加回来.
  • AutoCompleteMode我更改字符串时将设置为"无",然后将其设置回"SuggestAppend".
  • 挂钩TextUpdateKeyPress事件而不是TextChanged.
  • 每次都AutoCompleteCustomSource用新的替换现有的AutoCompleteStringCollection.

即使在各种组合中,这些都没有帮助. …

c# combobox textbox autocomplete winforms

47
推荐指数
2
解决办法
5万
查看次数

如何提高Jquery自动完成的性能

我计划对网站使用jquery自动完成功能,并已实现测试版本.我现在使用ajax调用来检索每个字符输入的新字符串列表.问题是它在填充新列表之前1.5秒变得相当慢.快速自动完成的最佳方法是什么?我正在使用cakephp,只是做了一个发现,并限制了10个项目.

javascript jquery autocomplete

47
推荐指数
5
解决办法
5万
查看次数

JavaFX中的AutoComplete ComboBox

我正在寻找一种向JavaFX添加自动完成功能的方法ComboBox.在搜索了很多之后,是时候在这里问了一下.

AutoFillBox是众所周知的,但不是我正在搜索的内容.我想要的是一个可编辑的组合框,输入列表时应该过滤掉.但是我也希望打开列表而不打字并查看整个项目.

任何的想法?

java combobox autocomplete javafx-2 javafx-8

47
推荐指数
5
解决办法
5万
查看次数

Elasticsearch:查找子字符串匹配

我想要执行精确的单词匹配和部分单词/子串匹配.例如,如果我搜索"男士剃须刀",那么我应该能够在结果中找到"男士剃须刀".但是在我搜索"en的剃须刀"的情况下,我也应该能够在结果中找到"男士剃须刀".我使用以下设置和映射:

索引设置:

PUT /my_index
{
    "settings": {
        "number_of_shards": 1, 
        "analysis": {
            "filter": {
                "autocomplete_filter": { 
                    "type":     "edge_ngram",
                    "min_gram": 1,
                    "max_gram": 20
                }
            },
            "analyzer": {
                "autocomplete": {
                    "type":      "custom",
                    "tokenizer": "standard",
                    "filter": [
                        "lowercase",
                        "autocomplete_filter" 
                    ]
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

映射:

PUT /my_index/my_type/_mapping
{
    "my_type": {
        "properties": {
            "name": {
                "type":            "string",
                "index_analyzer":  "autocomplete", 
                "search_analyzer": "standard" 
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

插入记录:

POST /my_index/my_type/_bulk
{ "index": { "_id": 1            }}
{ "name": "men's shaver" }
{ "index": { "_id": 2 …
Run Code Online (Sandbox Code Playgroud)

substring autocomplete stringtokenizer n-gram elasticsearch

46
推荐指数
2
解决办法
3万
查看次数

自动完成关闭与错误?

最近我遇到了一个问题,我想在所有浏览器中禁用自动完成功能.

Chrome在设置中有一项新功能,您可以在其中添加卡号.并且要求也是禁用它.

在所有浏览器中有效的方法是在表单级别执行此autocomplete = false.

但这不符合w3规则,他们强制要求autocomplete = off | on.

有人可以向我解释为什么在所有浏览器中都有错误的作品?

甚至ie8,所有firefox,safari等.但是不符合要求.

html w3c google-chrome autocomplete

46
推荐指数
6
解决办法
4万
查看次数

WPF:AutoComplete TextBox,...再次

另一个SO问题询问WPF中的自动完成文本框.有几个人建了这些,其中一个答案就是这个代码项目的文章.

但我没有找到任何WPF自动完成文本框与WinForms自动完成文本框进行比较.codeproject示例有效,有点......

alt text http://i50.tinypic.com/sx2ej5.jpg

...但

  • 它不是一个可重用的控件或DLL.这是我需要嵌入每个应用程序的代码.
  • 它仅适用于目录.它没有用于设置自动完成源是仅文件系统目录,还是文件系统文件或....等的属性.当然,我可以编写代码来执行此操作,但是...我宁愿使用已编写的其他人的代码.
  • 它没有设置弹出窗口大小等属性.
  • 有一个弹出列表框,显示可能的完成.浏览该列表时,文本框不会更改.在焦点列表框中键入字符不会导致文本框更新.
  • 远离列表框导航焦点不会使弹出列表框消失.这令人困惑.

所以,我的问题:

*没有任何人有一个免费的WPF自动完成文本框的作品,并提供优质的UI体验?*


回答

我是这样做的:

0.0.获得WPF工具包

0.1.运行WPF Toolkit的MSI

0.2.在Visual Studio中,从工具箱(特别是数据可视化组)拖放到UI设计器中.在VS工具箱中看起来像这样:

替代文字http://i49.tinypic.com/s12q6x.jpg

如果您不想使用设计师,请手工制作xaml.它看起来像这样:


<toolkit:AutoCompleteBox
   ToolTip="Enter the path of an assembly."
   x:Name="tbAssembly" Height="27" Width="102"
   Populating="tbAssembly_Populating" />
Run Code Online (Sandbox Code Playgroud)

...工具箱命名空间以这种方式映射的位置:

xmlns:toolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Input.Toolkit"
Run Code Online (Sandbox Code Playgroud)

0.3.提供Populating事件的代码.这是我用过的东西:


private void tbAssembly_Populating(object sender, System.Windows.Controls.PopulatingEventArgs e)
{
    string text = tbAssembly.Text;
    string dirname = Path.GetDirectoryName(text);

    if (Directory.Exists(Path.GetDirectoryName(dirname)))
    {
        string[] files = Directory.GetFiles(dirname, "*.*", SearchOption.TopDirectoryOnly);
        string[] dirs = Directory.GetDirectories(dirname, "*.*", SearchOption.TopDirectoryOnly);
        var candidates = new List<string>(); …
Run Code Online (Sandbox Code Playgroud)

wpf textbox autocomplete

45
推荐指数
2
解决办法
5万
查看次数

Twitter Bootstrap Typeahead - ID和标签

我正在使用Bootstrap 2.1.1和jQuery 1.8.1并尝试使用Typeahead的功能.

我尝试显示标签并使用像标准的ID<select />

这是我的预先初始化:

$(':input.autocomplete').typeahead({
    source: function (query, process) {
        $('#autocompleteForm .query').val(query);
        return $.get(
            $('#autocompleteForm').attr('action')
          , $('#autocompleteForm').serialize()
          , function (data) {
              return process(data);
          }
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

这是我发送的那种JSON

[{"id":1,"label":"machin"},{"id":2,"label":"truc"}]
Run Code Online (Sandbox Code Playgroud)

如何process()显示我的标签并将所选ID存储在另一个隐藏字段中?

javascript jquery autocomplete twitter-bootstrap typeahead.js

45
推荐指数
4
解决办法
7万
查看次数

从命令行查找目录中的文件

在诸如eclipse和textmate之类的编辑器/ ide中,有快捷方式可以快速查找项目目录中的特定文件.

是否有类似的工具在目录(递归),bash或其他shell中的文件名上完成路径完成?

我有很多目录和深度目录的项目(叹气,java).命中shell中的选项卡只循环直接目录中的文件,这还不够= /

bash shell autocomplete

44
推荐指数
3
解决办法
9万
查看次数

如何在海量数据集上实现自动完成

我正在尝试在我正在建立的网站上实施Google建议的内容,并且很好奇如何在非常大的数据集上进行操作.当然,如果您有1000个项目,则缓存项目并循环浏览它们.但是当你有一百万件商品时,你怎么做呢?此外,假设项目不是一个单词.具体来说,我对Pandora.com印象非常深刻.例如,如果您搜索"湿",它会带回"湿沙",但它也会带回Toad The Wet Sprocket.他们的自动完成功能很快.我的第一个想法是按前两个字母对项目进行分组,所以你会有类似的东西:

Dictionary<string,List<string>>
Run Code Online (Sandbox Code Playgroud)

其中键是前两个字母.那没关系,但是如果我想做类似Pandora的事情并允许用户看到与字符串中间匹配的结果呢?根据我的想法:Wet永远不会匹配Toad the Wet Sprocket,因为它将在"TO"桶而不是"WE"桶中.那么也许你可以把弦分开,"Toad the Wet Sprocket"进入"TO","WE"和"SP"桶(去掉"THE"这个词),但当你谈到一百万可能不得不说几句话的条目,似乎你很快就开始耗费大量的记忆.好的,这是一个很长的问题.思考?

optimization autocomplete

44
推荐指数
3
解决办法
3万
查看次数

在Chrome中禁用表单自动填充,而不会禁用自动填充功能

我们如何在某些<input>页面上禁用Chrome的自动填充功能,以防止在页面加载时自动填充它们?

同时我需要启用自动完成功能,因此用户仍然可以通过单击输入或键入输入来查看建议列表.可以这样做吗?

编辑:如果您认为有必要,或者您觉得它会使您的解决方案更简单,请随意使用普通的Javascript或jQuery.

html google-chrome autocomplete autofill

44
推荐指数
6
解决办法
9万
查看次数