Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Visual C++(.Net) / Visual C++(.Net).doc
Скачиваний:
160
Добавлен:
09.05.2015
Размер:
1.18 Mб
Скачать

Компонент GroupBox

Довольно часто вместо отдельных переключателей используют их групповой контейнер – компонент GroupBox, который расположен в группеContainersпалитры компонентов.

Вообще, GroupBox-компоненты используют, чтобы обеспечить разделение компонентов на различные группы, которые становятся для них родителями. Это делается для того, чтобы компоненты унаследовали свойства своих родителей. Обычно так делают, чтобы подразделить форму на несколько функций.

Кроме того, удобнее работать и с дизайном: перемещая GroupBox, мы одновременно перемещаем и все компоненты, которые в нем находятся.

Пример. Комплектация автомобиля

Рассмотрим программу, которая позволяет рассчитать стоимость автомобиля одной из четырех марок (LadaPriora,HyundayAccent,KiaSpectra,ChevroletLacetti) в зависимости от выбранной комплектации (коврики, защита картера, зимние шины, сигнализация). Если покупатель выбирает все дополнительные опции, ему предоставляется скидка 10% на оборудование.

Положим, известна стоимость каждого автомобиля:

  • Lada Priora – 320 тыс.руб,

  • Hyunday Accent – 340 тыс.руб,

  • Kia Spectra – 380 тыс.руб,

  • Chevrolet Lacetti – 440 тыс.руб.

А также известна стоимость дополнительных товаров:

  • коврики – 5 тыс.руб,

  • защита картера – 2,5 тыс.руб,

  • зимние шины – 7 тыс. руб,

  • сигнализация – 12 тыс.руб.

Очевидно, что покупатель приобретает только один из предложенных автомобилей, поэтому выбор будет осуществлен с помощью компонента RadioBox. С другой стороны, покупатель может купить несколько дополнительных товаров, поэтому выбор дополнительного оборудования будем осуществлять посредством компонентовCheckBox.

Для удобства обе группы кнопок поместим на разные панели. Расчет стоимости покупки осуществим по нажатию на кнопку типа Button. Стоимость покупки отобразим в компонентеLabelв нижней части окна. Общий вид окна приведен на рис.

Заметим, что покупатель обязан выбрать хотя бы один пункт из списка «Автомобили». Для этого необходимо установить свойство Checkedдля первого элемента списка равнымtrue. Для удобства радиокнопки назовем согласно соответствующим маркам машин:priora,accent,spectra,lacetti, а кнопки для выбора дополнительных опций, соответственно:kover,karter,shina,signal.

Далее осуществим обработку данных и расчет стоимости покупки. Очевидно, для этого необходимо написать обработчик события Clickдля кнопки «Рассчитать». Функция будет достаточно простой, в ней будет осуществляться проверка свойстваCheckedдля каждой радиокнопки.

double price, dop, skidka, summ;

price=0; dop=0; skidka=0; summ=0;

if (priora->Checked) price=320000.0;

if (accent->Checked) price=340000.0;

if (spectra->Checked) price=380000.0;

if (lacetti->Checked) price=440000.0;

if (kover->Checked) dop+=5000.0;

if (karter->Checked) dop+=2500.0;

if (shina->Checked) dop+=7000.0;

if (signal->Checked) dop+=12000.0;

if ((kover->Checked)&&(karter->Checked)&&(shina->Checked)&&

(signal->Checked)){

skidka=dop*0.1;

}

summ=price+dop-skidka;

label1->Text="Стоимость покупки = "+summ.ToString("C");

label2->Text="Скидка на доп. оборудование = "+skidka.ToString("C");

Для того чтобы не вводить пользователя в заблуждение, будем сбрасывать расчет стоимости покупки при изменении выбора. Для этого обработаем событие Clickдля одной из кнопок выбора и назначим эту функцию в качестве обработчика для всех остальных соответствующих компонент. Текст такой функции будет состоять из двух строк, которые очищают содержимое компонентовLabel.

label1->Text="Стоимость покупки = ";

label2->Text="Скидка на доп. оборудование = ";

В качестве упражнения предлагается при выборе марки автомобиля отображать соответствующую фотографию с помощью компонента Label.