Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Строки рука об руку с массивами


Автор: zarden 12.1.2006, 21:11
Люди добрые подскажите можно ли сделать так, чтобы строкам компонента например ComboBox сопоставлялиь элементы одномерного массива.
Т. е , допустим при выборе пользователем первой строки ComboBox в какое нибудь выражение, невидимое для пользователя, подставлялся нулевой элемент массива, при выборе второй строки - первый элемент и т.д.

Автор: Partizan 12.1.2006, 21:23
Думаю, тебе следует использовать свойство ItemIndex...
если выбрана первая строка, то ComboBox->ItemIndex == 0;
если вторая, то ComboBox->ItemIndex == 1; и так далее...

Автор: zarden 12.1.2006, 22:20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int A[2];
A[0] = 10;
A[1] = 20;
if (ComboBox1->ItemIndex==0)
Edit1->Text = IntToStr(A[1]);
Смысл вопроса заключается в том что: нельзя ли например уйти от того чтобы при каждом варианте выбора строки комбобокса расписывать оператором if какой именно элемент массива записывается в Edit.
Грубо говоря хотелось бы чтобы код выглядел примерно так:
If(ComboBox1->ItemIndex==i)
Edit1->Text = IntToStr(A[i]);
т.е чтобы номерам строк однозначно соответствовали такие же номера элементов массива: нулевой строке - нулевой элемент, первой строке - первый и т.д.

Автор: TIGERоX 12.1.2006, 22:57
Код

   const int cols = 2;
   int a[cols] = {1,2};
   if( ComboBox1->ItemIndex<cols && ComboBox1->ItemIndex>=0)
      Edit1->Text = IntToStr(a[ComboBox1->ItemIndex]);

Автор: Partizan 13.1.2006, 01:25
если размерность массива совпадает с количеством строк, то можно просто ограничиться следующим:
Код

int A[2];
A[0] = 10;
A[1] = 20;
Edit1->Text = IntToStr(A[ComboBox1->ItemIndex]);


З.ы. не забываем, что индексация в массиве также начинается с 0....
в Вашем же коде при выборе первой строки в Edit выведется 20...
в приведённом мной - 10...

З.з.ы. но в общем случае(т.е. если размерность массива не обязательно совпадает с кол-вом строк), делайте как предлагает TIGERоX

З.з.ы. Не забывайте, что если ни один айтем не выбран(такое может быть например при запуске приложения), то ItemIndex содержит -1

Автор: zarden 18.1.2006, 15:50
Огромное спасибо Partizan и TIGERоX. Сделал как вы предложили и все пошло. Тока вот не могу понять одного в случае когда кол-во строк не совпадает с кол-вом элементов массива для чего служит двойной &&?
Буду очень признателен если ответите на этот вопрос

Автор: Partizan 20.1.2006, 01:48
в примере TIGERоX'a подразумевается что количество строк в комбобоксе больше, чем количество строк в массиве...

if( ComboBox1->ItemIndex<cols && ComboBox1->ItemIndex>=0)

таким образом проверяется во первых:
if
не выходит ли индекс выбранного айтема за грани массива...//ComboBox1->ItemIndex<cols
и &&
вообще выбран хоть один айтем ComboBox1->ItemIndex>=0(в случае если не выбран, АйтемИндекс==-1)

так вот оператор && представляет собой не что иное как т.н. "логическое и"

Автор: zarden 20.1.2006, 23:20
Спасибо за разъяснения. Меня вот интересует как наиболее качественно подойти к самостоятельному изучению билдера с++? Может книгу какую посоветуете? Я вот приобрел издание Архангельского. Классная книга, но некоторые вещи просто непонятны. Не могу нащупать необходимый мне порядок изучения материалов

Автор: Partizan 20.1.2006, 23:27
сначала как следует изучи азы....синтаксис хотя бы....
возьми книжку просто по С++ и пиши консольные приложения...ознакомься для начала хотя бы со структурным программированием...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)