TreeView

                             TreeView

简介:TreeView是一个控件,可以显示多级导航菜单,是一个分级视图,它是一个供服务器创建导航菜单的占位符。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。

概括:TreeView 控件显示 Node 对象的分层列表,每个 Node 对象均由一个标签和一个可选的位图组成。TreeView 一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。创建了 TreeView 控件之后,可以通过设置属性与调用方法对各 Node 对象进行操作,这些操作包括添加、删除、对齐和其它操作

目的:有效的分层显示信息

解决问题:可以将信息分层显示,每一级的关系显示明确,而且可以隐藏节点。

代码:

  private void treeView_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);

            }

        }

 

        //设置子节点状态

        private void SetChildNodeCheckedState(TreeNode currNode, bool isCheckedOrNot)

        {

            if (currNode.Nodes == null) return; //没有子节点返回

            foreach (TreeNode tmpNode in currNode.Nodes)

            {

                tmpNode.Checked = isCheckedOrNot;

                SetChildNodeCheckedState(tmpNode, isCheckedOrNot);

            }

        }

 

        //设置父节点状态

        private 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);

            }

        }

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值