Question

Je souhaite ajouter des valeurs à la liste déroulante dans C ++ Builder 6. Je sais que je peux ajouter une chaîne à la liste déroulante à l'aide de l'éditeur de liste de chaînes.

Par exemple, j'ai ajouté cette liste à la liste déroulante:

car
ball
apple
bird

Je veux derrière chaque texte, il a sa propre valeur, ainsi je peux obtenir la valeur plus que le texte lorsque l'utilisateur sélectionne un texte. Tout comme HTML select.

Mais quand j'essaie d'ajouter de la valeur à chaque texte:

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

cela ajoutera plus de texte à la liste, comme

car
ball
apple
bird
0=mycar
1=aball

Ce n’est pas ce que je veux. Je ne veux pas que le texte supplémentaire soit ajouté à la liste. Alors, comment puis-je ajouter des valeurs à chaque texte correctement et obtenir la valeur?

Était-ce utile?

La solution

Si vous souhaitez stocker les valeurs dans la zone de liste déroulante elle-même, vous devez utiliser la propriété Objects [] au lieu de la propriété Values ??[], par exemple:

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

Comme vous pouvez le constater, cela nécessite de gérer des objets String alloués dynamiquement. Une meilleure option serait de stocker les valeurs dans une liste séparée, telle qu'un TStringList ou un std :: vector , comme suggéré par PoweRoy. Tant que cette liste contient le même nombre d'éléments que le contrôle ComboBox, vous pouvez utiliser les index ComboBox pour accéder aux valeurs, par exemple:

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];
...

Autres conseils

conserve une liste (vecteur / tableau à votre guise) contenant les paires nom / valeur. Lorsque vous sélectionnez un nom, recherchez la valeur dans la liste.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top