netlib.narod.ru< Назад | Оглавление | Далее >

Вариант с тремя состояниями

Обычно объект CheckBox находится в одном из двух состояний типа «включен/выключен», «да/нет», «1/0». Такой элемент управления понравился бы Джорджу Булю. Но бывают ситуации, когда одного бита мало, а двух много. Тогда можно установить флажок в третье состояние.

Когда это может понадобиться? Допустим, в текстовом процессоре (например, в диалоговом окне выбора шрифта) имеется элемент управления CheckBox с пометкой Курсив. Если пользователь выделяет текст, не набранный курсивом, элемент управления CheckBox должен находиться в неотмеченном состоянии. Если же текст набран курсивом, элемент управления должен быть отмечен. А если текст набран курсивом только частично? В таком случае у вас есть хороший кандидат на третье состояние. В прямоугольнике рисуется отметка, но при этом прямоугольник имеет светло-серый цвет.

Не путайте третье состояние с заблокированным элементом CheckBox. В нашем случае надо заблокировать CheckBox, если выделенный текст выводится шрифтом, для которого не предусмотрено курсивное начертание.

Для трехпозиционных флажков применяются два свойства:


Свойства CheckBox (выборочно)



Тип Свойство Доступ Описание

bool ThreeState Чтение/запись По умолчанию false
CheckState CheckState Чтение/запись Используется вместо Checked


Во-первых, надо присвоить свойству ThreeState значение true. После чего для инициализации элемента управления или определения его состояния вместо свойства Checked используйте свойство CheckState. Перечисление CheckState содержит три значения:


Перечисление CheckState



Член Значение

Unchecked 0
Checked 1
Indeterminate 2


Если вы хотите иметь возможность реагировать на изменения свойства CheckState, не устанавливайте обработчик события CheckedChanged. Вместо этого установите обработчик события CheckStateChanged:


События CheckBox (выборочно)



Событие Метод Делегат Аргументы

CheckStateChanged OnCheckStateChanged EventHandler EventArgs


По мере того как пользователь щелкает по трехпозиционному CheckBox, элемент управления проходит через все три состояния.


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz