Коллекция текстовых полей автозаполнения
-
20-09-2019 - |
Вопрос
В Windows forms текстовое поле можно преобразовать в текстовое поле автозаполнения, предоставив ему простой список строк или указав пользовательский источник, который может быть только AutoCompleteCollection, который представляет собой строго типизированный список строк.Я хотел бы иметь возможность добавлять ключ к каждому string..so что всякий раз, когда выбирается любое предложение, я могу захватить этот ключ.
Возможно, я просто рисую пробел .. но есть ли у кого - нибудь предложения ?Заранее спасибо
Решение
Класс 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
значение, вы можете проверить его в словаре.
Конечно, a TextBox
возможно, это не лучший способ представления ваших данных, если там должен быть ключ.Если там должен быть ключ, то ComboBox
(с DropDownStyle
установить на ComboBoxStyle.DropDownList
) может быть, это лучший вариант.