Индикаторы с флажком CheckBox используются в основном для того, чтобы пользователь мог включать и выключать какие-то опции, или для индикации состояния.
При каждом щелчке пользователя на индикаторе его состояние изменяется, проходя последовательно через три значения (при значении свойства AllowGrayed равном true): промежуточное (серое окно индикатора и серая галочка), выделение (появление черной галочки) и не выделенное (пустое окно индикатора).
Этим трем состояниям соответствуют три значения свойства State: cbGrayed, cbChecked, cbUnchecked. При AllowGrayed = false (значение по умолчанию), допускается только два состояния: выделенное и невыделенное. И State, и AllowGrayed можно устанавливать во время проектирования или программно во время выполнения.
Проверять состояние индикатора можно не только по значению State, но и по значению свойства Checked. Если Checked равно true, то индикатор выбран, т.е. State = cbChecked. Если Checked равно false, то State равно cbUnchecked или cbGrayed. Установка Checked в true во время проектирования или выполнения автоматически переключает State в cbChecked.
В индикаторе CheckBox надпись задается свойством Caption, а ее размещение по отношению к индикатору − свойством Alignment.
Список CheckListBox − это еще один компонент, имеющий индикаторы (см. лабораторную работу 4). Каждая строка списка имеет индикатор, состояние которого пользователь может изменять.
Состояния индикаторов определяют два свойства: State и Checked. Оба эти свойства можно рассматривать как индексированные массивы, каждый элемент которого соответствует индексу строки. Общее количество элементов определяется свойством Count (только для чтения). Поскольку индексы начинаются с нуля, то индекс последнего элемента равен Count – 1.
Свойства State и Checked можно устанавливать программно или читать, определяя установки пользователя. Например, операторы
CheckListBox1->Checked[1] = true;
CheckListBox1->State[2] = cbGrayed;
Устанавливают индикатор второй строки списка CheckListBox1 в состояние выбранного, а индикатор третьей строки − в промежуточное состояние.
Оператор
for(int i=0; i <CheckListBox1->Items->Count; i++)
if(CheckListBox1->Checked[i] …
проверяет состояние всех индикаторов списка, и для выбранных пользователем строк осуществляет какие-то действия (многоточие).
В компоненте CheckListBox имеется событие OnClickCheck, возникающее при каждом изменении пользователем состояния индикатора. Его можно использовать для обработки результатов изменения.
Продолжим выполнение задания 3.
6. Перенесите на форму панель Panel, на которой по горизонтали разместите метку Label с надписью CheckBox и два индикатора CheckBox с надписями опция 1 и опция 2 соответственно. В первом индикаторе свойство AllowGrayed установите в false, а во втором − в true. Выполните приложение. Убедитесь в том, что первый индикатор имеет два положения, а второй − три.