【问题标题】:how List<string> become AutoCompleteStringCollectionList<string> 如何成为 AutoCompleteStringCollection
【发布时间】:2011-06-08 08:53:17
【问题描述】:

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

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

注意 user.GetNameUsers() 是列表。

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

谢谢

【问题讨论】:

  • 可能需要注意:您获得 null 的原因是因为 as 运算符试图将您的 List 强制转换为 AutoCompleteStringCollection,但 as 只有在运行时类型匹配(它不会尝试任何用户定义的转换),并且List&lt;string&gt;AutoCompleteStringCollection的运行时类型不一样,所以它返回null。
  • owww 我明白了,谢谢。让它更懂
  • this.textbox.AutoCompleteCustomSource.AddRange(new string[] {"anytext","another one"});

标签: c# autocomplete desktop-application


【解决方案1】:
_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();

【讨论】:

  • 并且,如果您正在寻找单线,请将其包装在实用方法中。
  • 确保在执行此操作时从查询中删除任何空值。我没有这样做,当设置 AutoCompleteCustomSource 时它会崩溃,没有错误消息或调试信息。
【解决方案2】:

检查了documentationAutoCompleteStringCollection,特别是构造函数,我看到没有构造函数接受List

因此,您有两个选择。

1) 使用AddRange 将所有列表项添加到AutoCompleteStringCollection 的新实例中

var acsc= new AutoCompleteStringCollection();
acsc.AddRange(user.GetNameUsers().ToArray());

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

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

这样你就可以使用

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

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

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 2013-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2020-11-27
    相关资源
    最近更新 更多