2016-09-21 86 views
0

c#winform我在做什么错?我应该做什么不同? (自动完成winforms文本框)

我已经阅读了多篇文章/关于如何做到这一点的建议,下面是我尝试过的少数几篇文章/建议之一,但它不工作。实际上,当用户键入文本框时,什么都不会发生。

private void OperationListForm_Load(object sender, EventArgs e) 
    { 
     AutoCompleteStringCollection textBoxCollection = new AutoCompleteStringCollection(); 

     foreach (var item in _oiList) //_oiList is a list of objects 
     { 
      textBoxCollection.Add(item.ToString()); 
     } 

     textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; 
     textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 
     textBox1.AutoCompleteCustomSource = textBoxCollection; 
    } 

我是新来的,如果我需要提供更多信息,请告诉我。

回答

2

你需要仔细检查有几件事情:

  • 确保textBoxCollection中有
  • 确保您的“OperationListForm_Load”的方法被称为有效项目通过设置断点并运行应用程序
  • 确保将textBox1正确添加到窗体中

我测试了你的代码,它适用于我。这是我做的检查:

  1. 创建一个新的Windows窗体项目
  2. 添加一个文本框的形式
  3. 下面的代码添加到Form1.cs中:

    public partial class Form1 : Form 
    { 
        public Form1() 
        { 
        InitializeComponent(); 
        InitTextBox(); 
        } 
    
        void InitTextBox() 
        { 
        AutoCompleteStringCollection textBoxCollection = new AutoCompleteStringCollection(); 
        textBoxCollection.Add("Bobby"); 
        textBoxCollection.Add("Billy"); 
        textBoxCollection.Add("Britney"); 
    
        textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; 
        textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 
        textBox1.AutoCompleteCustomSource = textBoxCollection; 
        } 
    } 
    

这里是这个工作的截图:

screenshot of working code

+0

确保textBoxCollection在其中有有效的项目...强调VALID项目。谢谢 – greg

0

首先,您必须创建数组并将其添加到AutoCompleteStringCollection,然后将其设置为数据源。你可以像我的样品,它的工作。您的问题与您尝试添加的datasource有关。这是你无法做到的对象列表。

AutoCompleteStringCollection stringCollection = new AutoCompleteStringCollection(); 
String[] yourArray = new[] {"Cat", "Car", "Dog", "Dinner", "War", "White"}; 
stringCollection.AddRange(yourArray); 
textBox1.AutoCompleteCustomSource = stringCollection; 
textBox1.AutoCompleteMode = AutoCompleteMode.Suggest; 
textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource; 

enter image description here

+0

你是对的;它是一个对象列表。但是,因为在foreach中,我将“item.ToString()”添加到textBoxCollection,不应该textBoxCollection仍包含字符串列表(而不是对象)? – greg