自动完成TextBox控件

moh*_*eza 18 c# autocomplete winforms

我希望有一个文本框控件,用C#2008和LINQ在Windows应用程序中建议和附加数据库中的值.

我是用组合框做的,但我不能用文本框来做.

我该怎么做?

P.K*_*P.K 36

这可能不是最好的做事方式,但应该有效:

 this.textBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
 this.textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;

private void textBox1_TextChanged(object sender, EventArgs e)
{
    TextBox t = sender as TextBox;
    if (t != null)
    {
        //say you want to do a search when user types 3 or more chars
        if (t.Text.Length >= 3)
        {
            //SuggestStrings will have the logic to return array of strings either from cache/db
            string[] arr = SuggestStrings(t.Text);

            AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
            collection.AddRange(arr);

            this.textBox1.AutoCompleteCustomSource = collection;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @ mohammad-reza正如代码中的注释所说// SuggestStrings将具有从cache/db返回字符串数组的逻辑.您必须实施SuggestStrings.不要指望你只是从SO复制代码,它将开始工作.我们可以为您提供指示. (17认同)
  • @PK 你的答案给出了错误:`System.AccessViolationException: '试图读取或写入受保护的内存。这通常表明其他内存已损坏。'` (3认同)

Tho*_*que 11

看看AutoCompleteSource,AutoCompleteCustomSourceAutoCompleteMode属性.

textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection col = new AutoCompleteStringCollection();
col.Add("Foo");
col.Add("Bar");
textBox1.AutoCompleteCustomSource = col;
Run Code Online (Sandbox Code Playgroud)

请注意,设计师允许您在不编写任何代码的情况下执行此操作...


dan*_*004 5

有两种方法可以实现这种文本框效果:

在此输入图像描述

使用图形用户界面 (GUI);或使用代码

使用图形用户界面:
转到:“属性”选项卡;然后设置以下属性:

在此输入图像描述

然而; 最好的方法是通过代码创建它。请参阅下面的示例。

AutoCompleteStringCollection sourceName = new AutoCompleteStringCollection();

foreach (string name in listNames)
{    
    sourceName.Add(name);
}

txtName.AutoCompleteCustomSource = sourceName;
txtName.AutoCompleteMode = AutoCompleteMode.Suggest;
txtName.AutoCompleteSource = AutoCompleteSource.CustomSource;
Run Code Online (Sandbox Code Playgroud)