C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Массив строк занести в ComboBox., Можно ли занести в ComboBox массив
Yuri_R
  Отправлено: 20.01.2007, 22:48


Ученик-кочегар

Группа: Участник
Сообщений: 5



Можно ли занести в список ComboBox массив строк одним оператором присваивания?

[CОDE]

AnsiString mm[] = {"aaaa", "bbbb", "cccc"};
ComboBox1->Items->Text =*mm;

[/CОDE]

Заносится только 0-й элемент "aaaa".

Отредактировано Yuri_R — 30.01.2007, 21:35
Yuri_R
  Отправлено: 23.01.2007, 13:52


Ученик-кочегар

Группа: Участник
Сообщений: 5



Или, например, так:

AnsiString mm[] = {"aaaa", "bbbb", "cccc"};
ComboBox1->Items->Add(*mm);

Romikgy
Отправлено: 24.01.2007, 20:19


Дежурный стрелочник

Группа: Участник
Сообщений: 72



CODE

AnsiString mm[] = {"aaaa", "bbbb", "cccc"};
for (int i=0; i<3; i++)
ComboBox1->Items->Add(mm[i]);


Отредактировано Romikgy — 24.01.2007, 19:20
Yuri_R
  Отправлено: 24.01.2007, 21:24


Ученик-кочегар

Группа: Участник
Сообщений: 5



Да нет. Поэлементное занесение  — это понятно.
Но ведь Items, это список. По сути дела массив.
Неужели в C++ нельзя значение одного массива присвоить другому без формирования подобных циклов?
AVC
Отправлено: 25.01.2007, 10:03


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE (Yuri_R @ 24.01.2007, 20:24)
Неужели в C++ нельзя значение одного массива присвоить другому без формирования подобных циклов?

Должен вас огорчить — по большому счету нет.
Yuri_R
Отправлено: 25.01.2007, 13:02


Ученик-кочегар

Группа: Участник
Сообщений: 5



Даже, если предварительно сформировать пустые строки списка — заносится только 0-й элемент.

AnsiString mm[] = {"aaaa", "bbbb", "cccc"};
ComboBox1->Items->DelimitedText = ",,";
ComboBox1->Items->Add(*mm);

Но огорчаться не будем — есть много других способов.
nawok78
Отправлено: 30.01.2007, 16:52


Станционный диспетчер

Группа: Участник
Сообщений: 115



CODE

ComboBox1->AddStrings(TStrings Strings);

А уж TStrings вполне подойдет вместо массива.
Yuri_R
Отправлено: 30.01.2007, 21:06


Ученик-кочегар

Группа: Участник
Сообщений: 5



QUOTE (nawok78 @ 30.01.2007, 16:52)
CODE

ComboBox1->AddStrings(TStrings Strings);

А уж TStrings вполне подойдет вместо массива.

У меня получилась такая конструкция:
CODE

TStrings *Strings= new TStringList();
Strings->DelimitedText=",,";
Strings->Strings[0]="aaa0";
Strings->Strings[1]="aaa1";
Strings->Strings[2]="aaa2";
ComboBox1->Items->AddStrings(Strings);

Но это примерно то же самое, что и:
CODE

ComboBox1->Items->DelimitedText=",,";
ComboBox1->Items->Strings[0]="aaa0";
ComboBox1->Items->Strings[1]="aaa1";
ComboBox1->Items->Strings[2]="aaa2";
nawok78
Отправлено: 31.01.2007, 08:28


Станционный диспетчер

Группа: Участник
Сообщений: 115



В принципе тоже но речь не об этом
естественно, что когда-то этот массив нужно инициировать.

Нафига его вобще создавать, еслт ты один раз его используешь?

Речь о том что если он многократно используется, то большинство компонентов используют TStrings и передавать этот список от одного к другому проще в виде TStrings

QUOTE

Даже, если предварительно сформировать пустые строки списка — заносится только 0-й элемент.

AnsiString mm[] = {"aaaa", "bbbb", "cccc"};
ComboBox1->Items->DelimitedText = ",,";
ComboBox1->Items->Add(*mm);


AnsiString mm[] — это тоже самое что и AnsiString *mm; — указатель на первый элемент массива, следовательно *mm — имеет тип AnsiString и есть mm[0].

Вернуться в Вопросы программирования в C++Builder