質問

C ++ Builder 6のコンボボックスに値を追加したい。 文字列リストエディタで文字列をコンボボックスに追加できることはわかっています。

たとえば、このリストをcomboboxに追加しました:

car
ball
apple
bird

各テキストの背後にある必要があり、独自の値を持っているため、ユーザーがテキストを選択したときにテキストよりも高い値を取得できます。 HTMLの選択と同様。

しかし、各テキストに値を追加しようとすると:

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

次のように、リストにさらにテキストを追加します

car
ball
apple
bird
0=mycar
1=aball

これは私が望むものではありません。余分なテキストをリストに追加したくありません。 では、どのようにして各テキストに値を適切に追加し、値を取得できますか?

役に立ちましたか?

解決

ComboBox自体に値を保存する場合は、Values []プロパティの代わりにObjects []プロパティを使用する必要があります。例:

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

ご覧のとおり、これには動的に割り当てられたStringオブジェクトの管理が必要です。 PoweRoyが提案したように、 TStringList std :: vector などの別のリストに値を保存することをお勧めします。リストにComboBoxと同じ数のアイテムがある限り、ComboBoxインデックスを使用して値にアクセスできます。例:

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

または:

#include <vector>

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

他のヒント

名前と値のペアを含むリスト(必要なベクトル/配列)を保持します。名前を選択するときは、リストで値を調べます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top