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

 
Прошу подсказки
Андрей
Отправлено: 26.01.2005, 10:13


Не зарегистрирован







Подскажите пожалуйста как можно сделать такую штуку:
На форме существуют кнопки, поля текстового ввода и 30 чекбоксов:
Чксбоксы определяют графики( переменные) выводимые на ТЧарт
Нужно сделать так, чтобы пользователь мог выбрать только 5 из 30 чекбоксов. Остальные 25 при выборе 5 должны гаснуть и при отключении одного из уже выбранных вновь зажигаться
Так вот вопрос в том как перебрать потом чекбоксы по списку, для определения переменных ТЧарт??
Что-то типа индекса массива для конкретного чекбокса можно определить для последовательного перебора 30 чекбоксов???
Benish
Отправлено: 26.01.2005, 12:07


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

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



М.б. поможет контейнер multimap из STL?
Konstantine
Отправлено: 26.01.2005, 12:55


Мастер участка

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



ну массив так массив и делай:
в *h:
CODE
TCheckBox **arr;

в OnCreate:
CODE
arr=new TCheckBox*[30];
arr[0]=CheckBox0;
// и т.д.

в OnDestroy:
CODE
delete arr;

и всё... и обращаешься как arr[i]

Отредактировано Konstantine — 26/01/2005, 14:10
Андрей
Отправлено: 26.01.2005, 14:56


Не зарегистрирован







Спасибо
Попрбую так
Андрей
Отправлено: 26.01.2005, 15:58


Не зарегистрирован







Не работает

int tem=ComboBox2->ItemIndex;
if(arr[i]->ItemIndex<6)
{
.......

}

temp имеет значение а arr вызывает АксцесВиалейшен

sad.gif
Konstantine
Отправлено: 26.01.2005, 17:09


Мастер участка

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



а i чему равно?
при таком обращении нельзя выходить за рамки массива (в данном случае i должно быть равно от 0 до 29 включительно)

ну вот мой проэкт (правда на 2 combo) — он у меня работает

User Attached Image Скачать файл
ArrayCombo.rar_


olegenty
Отправлено: 27.01.2005, 08:44


Ветеран

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



а я в таких случая map (а никакой не multimap) использую. намного удобнее, чем морочить себе голову массивами.
map гаранитрует уникальность ключа, multimap — нет, на то он и "multi".
Андрей
Отправлено: 27.01.2005, 09:53


Не зарегистрирован







>а я в таких случая map использую
А можно пример??

Всем кто откликнулся спасибо
Я сделал так, пока работает правда использовал ComboBox со списком

bool vater=false,kotly=false,flowmeter=false;
TComponent *Temp;
for(int j=1;jComponentCount;j++)
{
if(this->Components[j]->ClassNameIs("TComboBox"))
{
Temp=this->Components[j];
if(dynamic_cast(Temp)->ItemIndex<=7)
{
QUERY+="vater."+BaseFields[dynamic_cast(Temp)->ItemIndex]+",";
vater=true;
}
if((dynamic_cast(Temp)->ItemIndex>7)&&(dynamic_cast(Temp)->ItemIndex<=13))
{
QUERY+="kotly."+BaseFields[dynamic_cast(Temp)->ItemIndex]+",";
kotly=true;
}
if(dynamic_cast(Temp)->ItemIndex>13)
{
QUERY+="flowmeter."+BaseFields[dynamic_cast(Temp)->ItemIndex]+",";
flowmeter=true;
}
} // end if
}// end for

для сборки запроса в базу в зависимости от выбора в КомбоБоксах
Benish
Отправлено: 27.01.2005, 12:53


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

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



QUOTE (olegenty @ 27/01/2005, 09:46)
а я в таких случая map (а никакой не multimap) использую. намного удобнее, чем морочить себе голову массивами.
map гаранитрует уникальность ключа, multimap — нет, на то он и "multi".

Идея была в том, чтобы использовать повторяющиеся ключи для отличия выбранных чекбоксов от невыбранных. Хотя можно и нооборот сделать, т.е. указатели на чекбоксы сделать ключами. Тогда map.

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