Beispiel #1
0
        /// <summary>
        /// Set Tree Node CheckBox State
        /// </summary>
        /// <param name="treeNode">node</param>
        /// <param name="checkboxChecked">CheckBox State</param>
        /// <returns>New CheckBox State</returns>
        public CkBoxState SetTreeNodeCheckBoxChecked(TreeNode treeNode, bool checkboxChecked)
        {
            CkBoxState checkboxState = GetTreeNodeCheckBoxState(treeNode);
            bool       done          = false;

            switch (checkboxState)
            {
            case CkBoxState.Unchecked:
                if (checkboxChecked)
                {
                    done = true;
                }
                break;

            case CkBoxState.Checked:
            case CkBoxState.Indeterminate:
                if (!checkboxChecked)
                {
                    done = true;
                }
                break;
            }

            if (done)
            {
                ToggleTreeNodeState(treeNode);
            }

            return(GetTreeNodeCheckBoxState(treeNode));
        }
Beispiel #2
0
        /// <summary>
        /// 设置树节点和他的子checkbox的状态递归
        /// </summary>
        /// <param name="treeNode">tree node</param>
        /// <param name="checkboxState">checkbox state</param>
        private void SetTreeNodeAndChildrenStateRecursively(TreeNode treeNode, CkBoxState checkboxState)
        {
            if ((treeNode != null))
            {
                SetTreeNodeState(treeNode, checkboxState);

                foreach (TreeNode objChildTreeNode in treeNode.Nodes)
                {
                    SetTreeNodeAndChildrenStateRecursively(objChildTreeNode, checkboxState);
                }
            }
        }
Beispiel #3
0
        /// <summary>
        /// 设置TreeNode的复选框状态
        /// </summary>
        /// <param name="treeNode">treenode</param>
        /// <param name="state">checkbox state</param>
        protected void SetNodeState(TreeNode treeNode, CkBoxState state)
        {
            if (!_NodeStateDict.ContainsKey(treeNode))
            {
                _NodeStateDict.Add(treeNode, state);
            }
            else
            {
                _NodeStateDict[treeNode] = state;
            }

            OnCheckBoxStateChanged(new CheckBoxStateChangedEventArgs(state, treeNode));
        }
Beispiel #4
0
        /// <summary>
        /// Add TreeNode
        /// </summary>
        /// <param name="nodes">node collection</param>
        /// <param name="treeNode">TreeNode</param>
        /// <param name="iImageIndex">image index</param>
        /// <param name="checkboxState">check box state</param>
        /// <returns></returns>
        protected TreeNode AddTreeNode(TreeNodeCollection nodes, TreeNode treeNode, CkBoxState checkboxState)
        {
            if (!nodes.Contains(treeNode))
            {
                nodes.Add(treeNode);
            }

            this.SetTreeNodeState(treeNode, checkboxState);

            SetTreeNodeAndChildrenStateRecursively(treeNode, checkboxState);
            SetParentTreeNodeStateRecursively(treeNode.Parent);

            return(treeNode);
        }
Beispiel #5
0
        /// <summary>
        /// 设置树节点复选框状态
        /// </summary>
        /// <param name="treeNode">tree node</param>
        /// <param name="checkboxState">checkbox state</param>
        private void SetTreeNodeState(TreeNode treeNode, CkBoxState checkboxState)
        {
            IntPtr hWnd;
            TVITEM tvi;

            hWnd = this.Handle;

            // Send a TVM_SETIMAGELIST with TVSIL_STATE.
            if (!_ImageListSent)
            {
                SendMessage(hWnd, (UInt32)TVM_SETIMAGELIST, (UInt32)TVSIL_STATE, (UInt32)CheckBoxStateImageList.Handle);
                _ImageListSent = true;
            }

            // The following uses the TVM_SETITEM message to set the State
            // of a given item. It uses the TVITEM structure.

            //  tvi.mask: include TVIF_HANDLE and TVIF_STATE
            tvi.mask = TVIF_HANDLE | TVIF_STATE;

            // To use the State image, tvi.State cannot be 0.
            //Setting it to 1 means to use the second image in the image list.
            tvi.state = (uint)checkboxState;
            // Left shift 12 to put info in bits 12 to 15
            tvi.state = tvi.state << 12;
            // Set StateMask. -This is required to isolate State above.
            tvi.stateMask = TVIS_STATEIMAGEMASK;

            // Define the item we want to set the State in.
            tvi.hItem = treeNode.Handle;  //For example, try the root.

            //  Initialize the rest to zero.
            tvi.pszText        = (IntPtr)0;
            tvi.cchTextMax     = 0;
            tvi.iImage         = 0;
            tvi.iSelectedImage = 0;
            tvi.cChildren      = 0;
            tvi.lParam         = (IntPtr)0;

            // Send the TVM_SETITEM message.
            //  TVM_SETITEM = 4365
            SendMessage(hWnd, (UInt32)TVM_SETITEM, (UInt32)0, ref tvi);

            //Set Node State
            SetNodeState(treeNode, checkboxState);
        }
Beispiel #6
0
        /// <summary>
        /// 状态切换的TreeNode
        /// </summary>
        /// <param name="treeNode">tree node</param>
        protected void ToggleTreeNodeState(TreeNode treeNode)
        {
            CkBoxState checkboxState = GetTreeNodeCheckBoxState(treeNode);

            this.BeginUpdate();

            switch (checkboxState)
            {
            case CkBoxState.Unchecked:
                SetTreeNodeAndChildrenStateRecursively(treeNode, CkBoxState.Checked);
                SetParentTreeNodeStateRecursively(treeNode.Parent);
                break;

            case CkBoxState.Checked:
            case CkBoxState.Indeterminate:
                SetTreeNodeAndChildrenStateRecursively(treeNode, CkBoxState.Unchecked);
                SetParentTreeNodeStateRecursively(treeNode.Parent);
                break;
            }

            this.EndUpdate();
        }
Beispiel #7
0
 public CheckBoxStateChangedEventArgs(CkBoxState state, TreeNode node)
 {
     _State = state;
     _Node  = node;
 }
Beispiel #8
0
        public TreeNode AddTreeNode(TreeNodeCollection nodes, string key, string text, string imageKey, string selectedImageKey, bool checkboxChecked)
        {
            CkBoxState checkboxState = checkboxChecked ? CkBoxState.Checked : CkBoxState.Unchecked;

            return(AddTreeNode(nodes, key, text, imageKey, selectedImageKey, checkboxState));
        }
Beispiel #9
0
        public TreeNode AddTreeNode(TreeNodeCollection nodes, TreeNode node, bool checkboxChecked)
        {
            CkBoxState checkboxState = checkboxChecked ? CkBoxState.Checked : CkBoxState.Unchecked;

            return(AddTreeNode(nodes, node, checkboxState));
        }
Beispiel #10
0
        protected TreeNode AddTreeNode(TreeNodeCollection nodes, string key, string text, string imageKey, string selectedImageKey, CkBoxState checkboxState)
        {
            TreeNode treeNode = nodes.Add(key, text, imageKey, selectedImageKey);

            this.SetTreeNodeState(treeNode, checkboxState);
            SetTreeNodeAndChildrenStateRecursively(treeNode, checkboxState);
            SetParentTreeNodeStateRecursively(treeNode.Parent);

            return(treeNode);
        }
Beispiel #11
0
        /// <summary>
        /// Add TreeNode
        /// </summary>
        /// <param name="nodes">node collection</param>
        /// <param name="text">text</param>
        /// <param name="iImageIndex">image index</param>
        /// <param name="checkboxState">check box state</param>
        /// <returns></returns>
        protected TreeNode AddTreeNode(TreeNodeCollection nodes, string text, CkBoxState checkboxState)
        {
            TreeNode treeNode = nodes.Add(text);

            return(AddTreeNode(nodes, treeNode, checkboxState));
        }