Вопрос

В 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 возможно, это не лучший способ представления ваших данных, если там должен быть ключ.Если там должен быть ключ, то ComboBoxDropDownStyle установить на ComboBoxStyle.DropDownList) может быть, это лучший вариант.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top