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 | < Назад | Оглавление | Далее > |