【问题标题】:how to limit dropdown items in autocomplete textbox c#?如何限制自动完成文本框c#中的下拉项目?
【发布时间】:2016-02-14 04:34:10
【问题描述】:

我有一个带有自动完成模式的文本框。当我输入前几个字符时,建议列表项超过 15 个。 我希望建议项目最多显示 10 个项目。

我没有找到可以做这件事的财产。

AutoCompleteStringCollection ac = new AutoCompleteStringCollection();
ac.AddRange(this.Source());

if (textBox1 != null)
{
    textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
    textBox1.AutoCompleteCustomSource = ac;
    textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
}

【问题讨论】:

  • 从数据中返回前 10 名
  • textBox1.AutoCompleteCustomSource = ac.Take(10)
  • @EhsanSajjad ac.Take() 方法不可用。
  • @CSTRAIZE 包括 System.Linq;并且您将在任何 ICollection 上使用 Take() 扩展。
  • @Mangist 仍然不可用。我已经在使用 System.Linq;头文件

标签: c# winforms autocomplete textbox


【解决方案1】:

您不能在 AutoCompleteStringCollection 类上使用 LINQ。我建议您在 TextBox 的 TextChanged 事件中自己处理过滤。我在下面写了一些测试代码。输入一些文本后,我们将过滤并从您的 Source() 数据集中获取前 10 个匹配项。然后我们可以为您的 TextBox 设置一个新的 AutoCompleteCustomSource。我对其进行了测试,并且有效:

private List<string> Source()
{
    var testItems = new List<string>();
    for (int i = 1; i < 1000; i ++)
    {
        testItems.Add(i.ToString());
    }

    return testItems;
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
    var topTenMatches = this.Source().Where(s => s.Contains(textBox1.Text)).Take(10);
    var autoCompleteSource = new AutoCompleteStringCollection();
    autoCompleteSource.AddRange(topTenMatches.ToArray());

    textBox1.AutoCompleteCustomSource = autoCompleteSource;
}

【讨论】:

  • 它有效。但我无法使用“KEY DOWN”键向下滚动来选择一个值。当我按下“KEY DOWN”时,第一个值被输入文本框中并关闭下拉列表
  • 那么,不要使用 TextChanged 事件,而是使用 KeyDown,如果键不是 Up/Down,则仅刷新列表。
  • KeyDown 事件也不起作用。在建议下拉菜单中使用向上键或向下键时不会触发 Keydown 事件。
猜你喜欢
  • 2016-08-16
  • 1970-01-01
  • 2011-01-11
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多