【问题标题】:Showing all items in textbox suggestions显示文本框建议中的所有项目
【发布时间】:2016-09-23 13:32:48
【问题描述】:

我写了一个函数,在接收到文本后,返回结果的建议/相似词。返回字符串列表。我将此功能与文本框 TEXT 更改连接。

例如,当我将 car 放入文本框时,我的函数将返回带有 carsma​​rs 的字符串列表(mars是相似词,sb 可能打错了)。

我想制作类似 autocompletemoe.suggest 的东西,但文本框应该显示此列表中的每个单词,而不仅仅是相同的字母。

例如:

它应该如何工作? 当我把车放进文本框时 TEXTBOX 应该为我建议:carsma​​rs

它是如何工作的? 当我把车放进文本框时 TEXTBOX 只为我推荐汽车

我有

my_textbox.AutoCompleteCustomSource = my_AutoCompleteStringCollection;
my_textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
my_textbox.AutoCompleteMode = AutoCompleteMode.Suggest

嗯,也许我会用其他方式来描述它。 让我们假设该方法

List<String> GiveSimmilar(string ABC_word)

exist 并且它将所有相似的单词返回给'ABC_word'。 我有一个名为“query_text”的文本框控件。 MainForm 中的代码片段

private AutoCompleteStringCollection suggestions;
private void Main_Form_Load(object sender, EventArgs e){
// ...
suggestions = new AutoCompleteStringCollection();
query_text.AutoCompleteCustomSource = suggestions;
query_text.AutoCompleteSource = AutoCompleteSource.CustomSource;
query_text.AutoCompleteMode = AutoCompleteMode.Suggest;
// ...
}
private void query_text_TextChanged(object sender, EventArgs e){
suggestions.Clear();
if(string.IsNullOrWhiteSpace(query_text)) return;
List<string> suggest = GiveSimmilar(query_text.Text);
foreach (string sug in suggest){
suggestions.Add(sug);
Console.WriteLine(sug);
}

}

[https://postimg.cc/image/4zt4g087d/

【问题讨论】:

  • 您在文本中的哪个位置开始搜索?似乎在第一个字符上发生了类似的搜索,因此在寻找 c... 而不是该字母之后的任何内容。您能否分享您的自动完成代码,以便我们进一步帮助您
  • AutoComplete 是TextBox 控件的一个内置方法。它的工作原理是只显示列表中具有相同先前字母的单词。我想显示列表中的所有单词,但我不知道该怎么做:D

标签: c# textbox lucene controls


【解决方案1】:

您的问题已通过正则表达式解决, (对不起我的英语,我正在努力:))

使用 System.Text.RegularExpressions;

namespace MyNameSpace
{

class GetAuto
{
    public GetAuto()
    {
        string text = "cars";
        foreach (var item in GetAutoComplete(text))
        {
            Console.WriteLine(item);
        } 
    }

    private List<string> GetAutoComplete(string text)
    {
        var lookForSimilarities = Regex.Match(text,"ars");

        var autoComplete = new List<string>();

        if (lookForSimilarities.Success)
        {
            autoComplete.Add("cars");
            autoComplete.Add("mars");
            autoComplete.Add("wars");
            autoComplete.Add("tarso");
        }


        return autoComplete;
    }
 }
}

我在这里做什么?让我解释一下

我用这段代码说 "嘿,搜索 "ars" 的所有相似之处"

    var lookForSimilarities = Regex.Match(text,"ars");

“如果您发现相似之处,请将所有内容添加到列表中”

        if (lookForSimilarities.Success)
        {
            autoComplete.Add("cars");
            autoComplete.Add("mars");
            autoComplete.Add("wars");
            autoComplete.Add("tarso");
        }

"返回结果"

          return autoComplete;

“进行迭代,并在控制台中显示结果,(但在你的情况下不是控制台)”

       foreach (var item in GetAutoComplete(text))
       {
              Console.WriteLine(item);
       } 

【讨论】:

  • 你误解了我的意思。我已经有一个函数可以将所有相似的单词返回到当前在 TextBox 中输入的单词。我在将它们显示为建议文本框时遇到问题。虽然我已经有一个包含类似单词的准备好的列表,但 TextBox 只显示预先具有相同字母的单词(不考虑其他 1 个字母的单词)。我不知道如何将其连接到建议文本框列表。图片在这里:
  • 上一条评论我没给你,图片链接,所以:Picture
  • 你使用的是正则表达式吗?因为如果您不使用它,那将永远无法工作,因为您需要表达一种模式。例如:我想要所有包含 "F" 或 "A" 的单词。正则表达式用于该工作。如果你需要一个代码 sn-p 告诉我。
  • 你误解了我的意思。只需查看我的更新帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多