Автозаполнение коллекции текстовых полей - PullRequest
0 голосов
/ 16 февраля 2010

В формах Windows текстовое поле можно превратить в текстовое поле с автозаполнением, предоставив ему простой список строк или предоставив ему собственный источник, который может быть только AutoCompleteCollection, который является строго типизированным списком строк. Я хотел бы иметь возможность добавлять ключ к каждой строке ... чтобы при выборе любого предложения я мог получить этот ключ.

Я мог бы просто нарисовать пробел .. но у кого-нибудь есть предложение? Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

Класс 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;
        }
    }

}
0 голосов
/ 16 февраля 2010

Если я правильно вас понимаю, вы хотите, чтобы значение в текстовом поле (которое может быть предложено автоматически) имело ассоциированное значение. Вы можете сделать это, создав Dictionary<string, string> с текстом TextBox в качестве ключа и тем, что вы называете 'ключом' в качестве значения. Всякий раз, когда вы хотите найти «ключ» для определенного значения TextBox, вы можете проверить его в словаре.

Конечно, TextBox может быть не лучшим способом представления ваших данных, если должен быть ключ. Если должен присутствовать ключ, лучшим вариантом будет ComboBoxDropDownStyle, установленным на ComboBoxStyle.DropDownList).

...