【问题标题】:Autocomplete textbox collection自动完成文本框集合
【发布时间】:2010-02-15 23:35:08
【问题描述】:

在 windows 窗体中,可以通过给它一个简单的字符串列表或给它一个只能是 AutoCompleteCollection,它是一个强类型的字符串列表。 I would like to be able to add a key to each string..so that whenever any suggestion is selected I can grab that key.

我可能只是在画一个空白..但是有人有建议吗? 提前致谢

【问题讨论】:

  • 我以为我可以从 AutoCompleteCollection 继承并重新实现 add 和 get,但我只能覆盖 toString、getHashCode 和 Equals....
  • 如果您正在回复 Josh 的回答,您应该将其发布在他的回答中。不过,至于您的评论,您可以实现另一个名称相同但参数不同的方法来重载它。你只能覆盖虚拟成员,但你总是可以重载。
  • 您不需要“重新实现”(覆盖)。相反,您添加了一个重载。此方法不会替换现有的采用一个参数的 Add 方法,它添加了一个额外的采用 2 个参数的 Add 方法。请参阅我的答案中的示例。
  • 是的,我在看你的答案之前发表了评论,我现在明白你的意思了。

标签: c# textbox autocomplete autocompletebox


【解决方案1】:

AutoCompleteStringCollection 类不是密封的,因此您当然可以从它派生并创建一个带有两个参数的 Add 重载:一个键和一个值。

然后您可以在字典中跟踪它。您必须将字符串存储两次(一次在基类的集合中,一次在字典中),但您可以添加如下查找方法:

class KeyedAutoCompleteStringCollection : AutoCompleteStringCollection {

    private readonly Dictionary<string,string> keyedValues =
        new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase);

    public void Add(string value, string key) {
        base.Add(value);
        keyedValues.Add(value, key); // intentionally backwards
    }

    public string Lookup(string value) {
        string key;
        if (keyedValues.TryGetValue(value, out key)) {
            return key;
        }
        else {
            return null;
        }
    }

}

【讨论】:

    【解决方案2】:

    如果我对您的理解正确,您希望文本框中的值(可以自动建议)具有关联的值。您可以通过创建一个Dictionary&lt;string, string&gt; 来做到这一点,其中TextBox 文本作为键,您所称的“键”作为值。每当您想找到特定 TextBox 值的“键”时,都可以在字典中查找它。

    当然,如果必须有密钥,TextBox 可能不是表示数据的最佳方式。如果必须有密钥,ComboBox(将DropDownStyle 设置为ComboBoxStyle.DropDownList)可能是更好的选择。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多