Элемент CheckedListBox представляет симбиоз компонентов ListBox и CheckBox. Для каждого элемента такого списка определено специальное поле CheckBox, которое можно отметить.
Все элементы задаются в CheckedListBox задаются в свойстве Items . Также, как и для элементов ListBox и ComboBox, мы можем задать набор элементов. По умолчанию для каждого добавляемого нового элемента флажок не отмечен:

Чтобы поставить отметку в checkBox рядом с элементом в списке, нам надо сначала выделить элемент и дополнительным щелчком уже установить флажок. Однако это не всегда удобно, и с помощью свойства CheckOnClick и установке для него значения true мы можем определить сразу выбор элемента и установку для него флажка в один клик.
Другое свойство MultiColumn при значении true позволяет сделать многоколоночный список, если элементы не помещаются по длине:

Выделенный элемент мы также можем получить с помощью свойства SelectedItem , а его индекс — с помощью свойства SelectedIndex . Но это верно только, если для свойства SelectionMode установлено значение One , что подразумевает выделение только одного элемента.
При установке для свойства SelectionMode значений MultiSmple и MultiExtended можно выбрать сразу несколько элементов, и тогда все выбранные элементы будут доступны в свойстве SelectedItems , а их индексы — в свойстве SelectedIndeces .
И поскольку мы можем поставить отметку не для всех выбранных элементов, то чтобы отдельно получить отмеченные элементы, у CheckedListBox имеются свойства CheckedItems и CheckedIndices .
Для добавления и удаления элементов в CheckedListBox определены все те же методы, что и в LstBox:
Add(item) : добавляет один элемент
AddRange(array) : добавляет в список массив элементов
Insert(index, item) : добавляет элемент по определенному индексу
Remove(item) : удаляет элемент
RemoveAt(index) : удаляет элемент по определенному индексу
Clear() : полностью очищает список
SetItemChecked и SetItemCheckState
К особенностям элемента можно отнести методы SetItemChecked и SetItemCheckState . Метод SetItemChecked позволяет установить или сбросить отметку на одном из элементов. А метод SetItemCheckState позволяет установить флажок в одно из трех состояний: Checked (отмечено), Unchecked (неотмечено) и Indeterminate (промежуточное состояние):
На этом шаге мы рассмотрим назначение, основные свойства и пример использования этого компонента .
Компонент CheckedListBox (рисунок 1) представляет собой список, перед каждым элементом которого находится переключатель CheckBox .
Рис.1. Компонент CheckedListBox
Свойства компонента CheckedListBox приведены в таблице 1.
| Свойство | Описание |
|---|---|
| Items | Элементы списка — коллекция строк |
| Items.Count | Количество элементов списка |
| Sorted | Признак необходимости автоматической сортировки ( True ) списка после добавления очередного элемента |
| CheckOnClick | Способ пометки элемента списка. Если значение свойства равно False , то первый щелчок выделяет элемент списка (строку), а второй устанавливает в выбранное состояние переключатель. Если значение свойства равно True , то щелчок на элементе списка выделяет элемент и устанавливает во включенное состояние переключатель |
| CheckedItems | Свойство CheckedItems представляет собой коллекцию, элементы которой содержат выбранные элементы списка |
| CheckedItems.Count | Количество выбранных элементов списка, переключатели которых установлены в выбранное состояние |
| CheckedIndices | Свойство CheckedIndices представляет собой коллекцию, элементы которой содержат номера выбранных (помеченных) элементов списка |
| ScrollAlwaysVisible | Признак необходимости всегда отображать вертикальную полосу прокрутки. Если значение свойства равно False , то полоса прокрутки отображается, только если все элементы списка нельзя отобразить при заданном размере компонента |
| MultiColumn | Признак необходимости отображать список в несколько колонок. Количество отображаемых колонок зависит от количества элементов и размера области отображения списка |
| Location | Положение компонента на поверхности формы |
| Size | Размер компонента без (для компонентов типа DropDown и DropDownList ) или с учетом (для компонента типа Simple ) размера области списка или области ввода |
| Font | Шрифт, используемый для отображения содержимого поля редактирования и элементов списка |
Сформировать список компонента CheckedListBox можно во время работы программы, применив метод Add к свойству Items . В инструкции вызова метода Add в качестве второго параметра можно указать константу True . В этом случае переключатель перед элементом списка будет установлен в выбранное состояние.
Приведем небольшой пример использования этого компонента.
Есть список с номерами картинок, а также 4 компонента pictureBox для их отображения (рисунок 2).
Рис.2. Приложение на этапе проектирования
При отметке соответствующего элемента списка картинка отображается, при снятии отметки — скрывается.
Приведем текст приложения.
Результат работы приложения приведен на рисунке 3.
Рис.3. Результат работы приложения
Прокомментируем приведенный фрагмент.
Основная работа выполняется в обработчике события ItemCheck компонента checkedListBox1 . Этот обработчик вызывается после изменения переключателя CheckBox .
Информация об измененном переключателе находится в параметре e . Например свойство Index содержит номер измененной строки, а свойство NewValue — новое значение переключателя.
Свойство CheckState компонента checkedListBox содержит возможные состояния флажка. Так, например, значение Checked говорит о том, что флажок установлен.
В зависимости от состояния флажка мы отображаем или скрываем соответствующую картинку.
На следующем шаге мы рассмотрим компонент Timer .
Компонент CheckedListBox представляет собой список, перед каждым элементом которого находится переключатель CheckBox. Свойства компонентаCheckedListBoxприведены в таблице:
| Свойства, методы | Описание |
| Items | Элементы списка – коллекция строк |
| Items.Count | Количество элементов списка |
| Sorted | Признак необходимости автоматической сортировки списка после добавления очередного элемента |
| CheckOnClick | Способ пометки элемента списка. |
| CheckedItems | Представляет собой коллекцию, элементы которой содержат выбранные элементы списка |
| CheckedItems.Count | Количество выбранных элементов списка, переключатели которых установлены в выбранное состояние |
| CheckedIndices | Представляет собой коллекцию, элементы которой содержат номера выбранных (помеченных) элементов списка |
| MultiColumn | Признак необходимости отображать список в несколько колонок. Количество отображаемых колонок зависит от количества элементов и размера области отображения списка |
| Items.Add | Позволяет добавить строку во время работы программы. Например: checkedListBox1.Items.Add(«Красный»); В качестве второго параметра метода Add можно указать константуtrue. Например: checkedListBox1.Items.Add(«Красный», true); В этом случае переключатель перед элементом списка будет установлен в выбранное состояние. |
| GetItemChecked | Возвращает значение, указывающее отмечен ли заданный элемент. |
| SetItemChecked | Устанавливает состояние элемента с заданным индексом в trueилиfalse. |
В качестве примера создадим тестовую программу.
Обработка результатов: по одному баллу прибавляется за каждый ответ «да» на вопросы 1,5,7 и за ответ «нет» на остальные вопросы.
Сумма набранных баллов:
1-3: У вас низкий коммуникативный уровень. Ваше поведение устойчиво, и вы не считаете нужным его изменять в зависимости от ситуации. Вы способны к искреннему самораскрытию в общении. Некоторые считают вас неудобным в общении по причине вашей прямолинейности.
4-6: У вас средний коммуникативный контроль. Вы искренни, но сдержанны в своих эмоциональных проявлениях. Вам следует больше считаться в своём поведении с окружающими людьми.
7-10: У вас высокий коммуникативный уровень. Вы легко входите в любую роль, гибко реагируете на изменения ситуации и даже в состоянии предвидеть впечатление, которое произведёте на окружающих.
Процедура для кнопки «Узнать результат»:
if (!checkedListBox1.GetItemChecked(0)) s++;
if (checkedListBox1.GetItemChecked(1)) s++;
if (checkedListBox1.GetItemChecked(2)) s++;
if (checkedListBox1.GetItemChecked(3)) s++;
if (!checkedListBox1.GetItemChecked(4)) s++;
if (checkedListBox1.GetItemChecked(5)) s++;
if (!checkedListBox1.GetItemChecked(6)) s++;
if (checkedListBox1.GetItemChecked(7)) s++;
if (checkedListBox1.GetItemChecked(8)) s++;
if (checkedListBox1.GetItemChecked(9)) s++;