首页 > 代码库 > Winform TreeView控件技巧

Winform TreeView控件技巧

 

      在开发的时候经常使用treeview控件来显示组织结构啊,目录结构啊,通常会结合属性checkedboxs,来做选中,取消的操作下面是一个选中,取消的小例子,选中节点的时候,如果节点存在子节点,可以选中全部的子节点;如果取消一个节点的选中状态,当前节点同时又存在父节点的话,就取消父节点的选中状态。

 

private void trvPost_AfterCheck(object sender, TreeViewEventArgs e)        {            //通过鼠标或者键盘触发事件,防止修改节点的Checked状态时候再次进入            if (e.Action == TreeViewAction.ByMouse || e.Action == TreeViewAction.ByKeyboard)            {               SetChildNodeCheckedState(e.Node, e.Node.Checked);               SetParentNodeCheckedState(e.Node, e.Node.Checked);            }        } //设置子节点状态        public void SetChildNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)        {            if (currNode.Nodes == null) return; //没有子节点返回            foreach (TreeNode tmpNode in currNode.Nodes)            {                tmpNode.Checked = isCheckedOrNot;                SetChildNodeCheckedState(tmpNode, isCheckedOrNot);            }        }        //设置父节点状态        public void SetParentNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)        {            if (currNode.Parent == null) return; //没有父节点返回            if (isCheckedOrNot) //如果当前节点被选中,则设置所有父节点都被选中            {                currNode.Parent.Checked = isCheckedOrNot;                SetParentNodeCheckedState(currNode.Parent, isCheckedOrNot);            }            else //如果当前节点没有被选中,则当其父节点的子节点有一个被选中时,父节点被选中,否则父节点不被选中            {                bool checkedFlag = false;                foreach (TreeNode tmpNode in currNode.Parent.Nodes)                {                    if (tmpNode.Checked)                    {                        checkedFlag = true;                        break;                    }                }                currNode.Parent.Checked = checkedFlag;                SetParentNodeCheckedState(currNode.Parent, checkedFlag);            }        }

 

Winform TreeView控件技巧