| Главная | Журнал | Форум | Wiki | DRKB | Страны мира |
Трёхпозиционные чекбоксы в TreeView
TreeView с чекбоксами, реализованный во фреймворке (свойство TreeView.CheckBoxes = True) позволяет использовать только 2 состояния (TreeNode.Checked = True или False). Ниже приведена реализация дерева с трёхпозиционными чекбоксами, позволяющая: • использовать список изображений состояний, который отсутствует в .NET Framework. Во многих примерах решения этой задачи используется список картинок, а не список изображений чекбоксов и, следовательно, не нет возможности отображать для нод одновременно чекбоксы и иконки. КодДля начала унаследуем класс TriStateTreeView от базового TreeView. Для нового класса необходим список изображений состояний с иконками для 4 состояний: нет, не отмечено, отмечено, частично отмечено (именно в таком порядке). Передаём список изображений состояний в конструктор: m_ctlTriStateTreeView = New TriStateTreeView(Me.StateImageList) Так же объявляем перечисление с состояниями: Friend Enum CheckBoxState None = 0 Unchecked = 1 Checked = 2 Indeterminate = 3 End Enum Для добавления нод в дерево можно использовать вспомогательную функцию AddTreeNode класса TriStateTreeView: objTreeNodeRoot = m_ctlTriStateTreeView.AddTreeNode( _
m_ctlTriStateTreeView.Nodes, "My Computer", _
IMG_COMPUTER, CheckBoxState.None)
Функция GetTreeNodeState класса TriStateTreeView позволяет узнать состояние ноды: Friend Function GetTreeNodeState(ByVal objTreeNode As _
TreeNode) As CheckBoxState
Для установки состояния ноды используется функция SetTreeNodeState класса TriStateTreeView: Friend Sub SetTreeNodeState(ByVal objTreeNode As _
TreeNode, ByVal eCheckBoxState As CheckBoxState)
Важные моментыДля изменения состояния ноды код перехватывает события MouseUp и KeyUp (клик мышкой или нажатие клавиши). Кроме того, данная реализация защищает от раскрытия или сворачивания ноды при двойном клике на чекбоксе. Скачать демонстрационный проект - 21 кб |
Основные разделы сайта
|
|
|