List <string>如何成为AutoCompleteStringCollection </string>

时间:2011-01-13 08:51:25

标签: c# autocomplete desktop-application

我有列表,我想将其转换为autoCompleteStringCollection ..而且我不想使用foreach。

        _textbox.AutoCompleteMode = AutoCompleteMode.Append;
        _textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
        _textbox.AutoCompleteCustomSource = user.GetNameUsers() as AutoCompleteStringCollection;

注意user.GetNameUsers()是列表。

代码不起作用,它变为空。

谢谢

2 个答案:

答案 0 :(得分:17)

_textbox.AutoCompleteMode = AutoCompleteMode.Append;
_textbox.AutoCompleteSource = AutoCompleteSource.CustomSource;
var autoComplete = new AutoCompleteStringCollection();
autoComplete.AddRange(user.GetNameUsers().ToArray());
_textbox.AutoCompleteCustomSource = autoComplete;

如果您经常需要,可以编写扩展方法:

public static class EnumerableExtensionsEx
{
    public static AutoCompleteStringCollection ToAutoCompleteStringCollection(
        this IEnumerable<string> enumerable)
    {
        if(enumerable == null) throw new ArgumentNullException("enumerable");
        var autoComplete = new AutoCompleteStringCollection();
        foreach(var item in enumerable) autoComplete.Add(item);
        return autoComplete;
    }
}

用法:

_textbox.AutoCompleteCustomSource = user.GetUsers().ToAutoCompleteStringCollection();

答案 1 :(得分:1)

检查了AutoCompleteStringCollection List,特别是构造函数,我看到没有构造函数需要AddRange

因此,您有两个选择。

1)使用AutoCompleteStringCollection将所有列表项添加到var acsc= new AutoCompleteStringCollection(); acsc.AddRange(user.GetNameUsers().ToArray()); 的新实例

public class MyAutoCompleteStringCollection : AutoCompleteStringCollection
{
  public MyAutoCompleteStringCollection(IEnumerable items)
  {
     this.AddRange(items.ToArray())
  }
}

2)继承一个新类,它添加了你需要的构造函数,并在内部调用与上面相同的代码。

_textbox.AutoCompleteCustomSource = new MyAutoCompleteStringCollection (user.GetNameUsers());

因此你可以使用

{{1}}

就个人而言,我现在选择选项1.