Pergunta

Quero adicionar valores ao ComboBox no C ++ Builder 6. Sei que posso adicionar String ao ComboBox by String List Editor.

Por exemplo, adicionei esta lista ao ComboBox:

car
ball
apple
bird

Eu quero por trás de cada texto, ele tem seu próprio valor, para que eu possa obter o valor Rahter do que o texto quando o usuário selecionou um texto. Assim como HTML Select.

Mas quando tento agregar valor a cada texto:

ComboBox1->Items->Values[0] = "mycar";
ComboBox1->Items->Values[1] = "aball";
etc...

ele adicionará mais texto à lista, como

car
ball
apple
bird
0=mycar
1=aball

Não é isso que eu quero. Não quero que o texto extra seja adicionado à lista. Então, como posso adicionar valores a cada texto corretamente e obter o valor?

Foi útil?

Solução

Se você deseja armazenar os valores no próprio ComboBox, precisará usar a propriedade Objetos [] em vez da propriedade Valores [], por exemplo:

ComboBox1->Items->Objects[0] = (TObject*) new String("mycar");
ComboBox1->Items->Objects[1] = (TObject*) new String("aball");
...
String value = * (String*) ComboBox1->Items->Objects[ComboBox1->ItemIndex];
...
delete (String*) ComboBox1->Items->Objects[0];
delete (String*) ComboBox1->Items->Objects[1];

Como você pode ver, isso requer gerenciamento de objetos de string alocados dinamicamente. Uma opção melhor seria armazenar os valores em uma lista separada, como um TStringList ou std::vector, como Poweroy sugeriu. Desde que essa lista tenha o mesmo número de itens que o ComboBox, você pode usar índices de ComboBox para acessar os valores, por exemplo:

TStringList *MyValues = new TStringList;
...
MyValues->Add("mycar");
MyValues->Add("aball");
...
String value = MyValues->Strings[ComboBox1->ItemIndex];
...
delete MyValues;

Ou:

#include <vector>

std::vector<String> MyValues;
...
MyValues.push_back("mycar");
MyValues.push_back("aball");
...
String value = MyValues[ComboBox1->ItemIndex];
...

Outras dicas

Segure uma lista (vetor/matriz o que você quiser) contendo o nome e os pares de valor. Ao selecionar um nome, procure o valor na lista.

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