§ 16. Компоненты для работы со списками строк

16.5. Компонент CheckListBox

Компонент список с флажками — CheckListBox представляет собой вариант списка с индикаторами. Возле каждой строки списка имеется индикатор-флажок, который пользователь может переключать. На панели компонентов Additional компонент список с флажками изображен в виде , имя объекта CheckListBox. Компонент CheckListBox, помещенный на форму, получает имя  CheckListBoxN, где N — номер 1, 2, 3… (пример 16.13).

Основное свойство компонента CheckListBox, так же как и у компонентов ListBox и ComboBox — это свойство Items, принадлежащее к типу TSring.

Состояния индикаторов списка с флажками определяют свойства State и Checked, рассмотренные для компонента флажок (CheckBox). Эти свойства можно рассматривать как массивы, каждый элемент которого соответствует индексу строки.

При изменении пользователем состояния индикатора возникает событие OnClickCheck, которое можно использовать для написания обработчика результатов изменения.

Пример 16.14. В текстовом файле books.txt хранятся названия книг, имеющихся в книжном магазине, в текстовом файле price.txt — цены этих книг. Создать приложение, в котором пользователь сможет выбирать книги для покупки. При изменении выбора должна подсчитываться сумма покупки.

Этапы выполнения задания

  1. Поместить на форму компоненты: CheckListBox1, ListBox1 и Label1.
  2. Изменить свойство Caption компонента Label1 на «Сумма покупки 0 рублей».
  3. Написать обработчик события OnCreat для формы, загружающий названия книг из файла books.txt в компонент CheckListBox1 и цены из файла price.txt в компонент ListBox1.
  4. Написать обработчик события OnClickCheck для компонента CheckListBox1, подсчитывающего сумму покупки.

Пример 16.13. Компонент CheckListBox на форме:

Пример 16.14. Форма на этапе проектирования:

Обработчик события OnCreat для формы.

void __fastcall TForm1::FormCreate
                (TObject *Sender)

{

  CheckListBox1 -> Items -> 

  LoadFromFile("books.txt");

  ListBox1 -> Items -> 

  LoadFromFile("price.txt");

}

Обработчик события OnClickCheck для компонента CheckListBox1:

void __fastcall TForm1::
CheckListBox1ClickCheck
(TObject *Sender)

{

  double s = 0;

  for (int i = 0; i < 

   CheckListBox1 -> Items -> Count;

   i++) {

    if (CheckListBox1 -> Checked[i])

      s += StrToFloat

      (ListBox1-> Items-> Strings[i]);

  }

  Label1 -> Caption = 

  "Стоимость покупки " + 

  FloatToStr(s) + " рублей";

}

Работающее приложение:

Содержимое файлов: