| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
|
| Автор: Partizan 13.1.2006, 01:25 | ||
если размерность массива совпадает с количеством строк, то можно просто ограничиться следующим:
З.ы. не забываем, что индексация в массиве также начинается с 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 |
| сначала как следует изучи азы....синтаксис хотя бы.... возьми книжку просто по С++ и пиши консольные приложения...ознакомься для начала хотя бы со структурным программированием... |