在 Windows 窗体中,可以通过给它一个简单的字符串列表或给它一个只能是 AutoCompleteCollection 的自定义源,它是一个强类型的字符串列表,可以将一个文本框变成一个自动完成文本框。我希望能够为每个字符串添加一个密钥..只要选择任何建议,我都可以抓住该密钥。
我可能只是在画一个空白..但是有人有建议吗?提前致谢
在 Windows 窗体中,可以通过给它一个简单的字符串列表或给它一个只能是 AutoCompleteCollection 的自定义源,它是一个强类型的字符串列表,可以将一个文本框变成一个自动完成文本框。我希望能够为每个字符串添加一个密钥..只要选择任何建议,我都可以抓住该密钥。
我可能只是在画一个空白..但是有人有建议吗?提前致谢
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;
}
}
}
如果我理解正确,您希望文本框中的值(可以自动建议)具有关联的值。您可以通过创建一个Dictionary<string, string>
以TextBox
文本为键并将您所称的“键”作为值的内容来做到这一点。每当您想找到特定TextBox
值的“键”时,都可以在字典中查找它。
当然,TextBox
如果必须有密钥,a 可能不是表示数据的最佳方式。如果必须有密钥,则ComboBox
(with DropDownStyle
set to ComboBoxStyle.DropDownList
) 可能是更好的选择。