Como adicionar valores ao ComboBox no C ++ Builder?
-
05-07-2019 - |
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?
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.