Pergunta

Nos formulários do Windows, uma caixa de texto pode ser transformada em uma caixa de texto de preenchimento automático, dando -lhe uma lista simples de strings ou fornecendo uma fonte personalizada que pode ser apenas uma forma automática que é uma forte lista de seqüências digitadas. Eu gostaria de poder adicionar uma chave a cada string ... então, sempre que qualquer sugestão for selecionada, eu pudesse pegar essa chave.

Eu posso estar ficando em branco ... mas alguém tem uma sugestão? desde já, obrigado

Foi útil?

Solução

A classe AutoCompleteStringCollection não é selada, para que você certamente possa derivar e criar uma sobrecarga de add que leva dois parâmetros: uma chave e um valor.

Então você pode rastrear isso em um dicionário. Você terá que armazenar a corda duas vezes (uma vez na coleção da classe base e uma vez no seu dicionário), mas poderá adicionar um método de pesquisa como assim:

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;
        }
    }

}

Outras dicas

Se eu entendo você corretamente, você deseja que o valor na caixa de texto (que pode ser sugerido automaticamente) para ter um valor associado. Você poderia fazer isso criando um Dictionary<string, string> com o TextBox texto como chave e o que você está chamando de 'chave' como o valor. Sempre que você quiser localizar a 'chave' para um determinado TextBox valor, você pode verificar o dicionário para ele.

Claro, um TextBox Pode não ser a melhor maneira de representar seus dados se houver uma chave. Se deve haver uma chave, o ComboBox (com DropDownStyle definido como ComboBoxStyle.DropDownList) pode ser uma opção melhor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top