我在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".TextUpdate或KeyPress事件而不是TextChanged.AutoCompleteCustomSource用新的替换现有的AutoCompleteStringCollection.即使在各种组合中,这些都没有帮助. …
我计划对网站使用jquery自动完成功能,并已实现测试版本.我现在使用ajax调用来检索每个字符输入的新字符串列表.问题是它在填充新列表之前1.5秒变得相当慢.快速自动完成的最佳方法是什么?我正在使用cakephp,只是做了一个发现,并限制了10个项目.
我正在寻找一种向JavaFX添加自动完成功能的方法ComboBox.在搜索了很多之后,是时候在这里问了一下.
这AutoFillBox是众所周知的,但不是我正在搜索的内容.我想要的是一个可编辑的组合框,输入列表时应该过滤掉.但是我也希望打开列表而不打字并查看整个项目.
任何的想法?
我想要执行精确的单词匹配和部分单词/子串匹配.例如,如果我搜索"男士剃须刀",那么我应该能够在结果中找到"男士剃须刀".但是在我搜索"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) 最近我遇到了一个问题,我想在所有浏览器中禁用自动完成功能.
Chrome在设置中有一项新功能,您可以在其中添加卡号.并且要求也是禁用它.
在所有浏览器中有效的方法是在表单级别执行此autocomplete = false.
但这不符合w3规则,他们强制要求autocomplete = off | on.
有人可以向我解释为什么在所有浏览器中都有错误的作品?
甚至ie8,所有firefox,safari等.但是不符合要求.
另一个SO问题询问WPF中的自动完成文本框.有几个人建了这些,其中一个答案就是这个代码项目的文章.
但我没有找到任何WPF自动完成文本框与WinForms自动完成文本框进行比较.codeproject示例有效,有点......
alt text http://i50.tinypic.com/sx2ej5.jpg
...但
所以,我的问题:
*没有任何人有一个免费的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) 我正在使用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
在诸如eclipse和textmate之类的编辑器/ ide中,有快捷方式可以快速查找项目目录中的特定文件.
是否有类似的工具在目录(递归),bash或其他shell中的文件名上完成路径完成?
我有很多目录和深度目录的项目(叹气,java).命中shell中的选项卡只循环直接目录中的文件,这还不够= /
我正在尝试在我正在建立的网站上实施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"这个词),但当你谈到一百万可能不得不说几句话的条目,似乎你很快就开始耗费大量的记忆.好的,这是一个很长的问题.思考?
我们如何在某些<input>页面上禁用Chrome的自动填充功能,以防止在页面加载时自动填充它们?
同时我需要启用自动完成功能,因此用户仍然可以通过单击输入或键入输入来查看建议列表.可以这样做吗?
编辑:如果您认为有必要,或者您觉得它会使您的解决方案更简单,请随意使用普通的Javascript或jQuery.
autocomplete ×10
combobox ×2
html ×2
javascript ×2
jquery ×2
textbox ×2
autofill ×1
bash ×1
c# ×1
java ×1
javafx-2 ×1
javafx-8 ×1
n-gram ×1
optimization ×1
shell ×1
substring ×1
typeahead.js ×1
w3c ×1
winforms ×1
wpf ×1