WinForm TreeView的使用

来源:互联网 发布:javascript日历源码 编辑:程序博客网 时间:2024/05/21 12:00

1.生成节点(以加载目录下的文件和子目录为例)

   DirectoryInfo dic = new DirectoryInfo(@"E:\BaiduYunDownload\MvcMusicStore-v3.0");
            TreeNode node = new TreeNode(dic.Name);

            settreeView3(dic, node.Nodes);

 void settreeView3(DirectoryInfo dic, TreeNodeCollection node)
        {
            FileSystemInfo[] filesysteminfo = dic.GetFileSystemInfos();
            for (int i = 0; i < filesysteminfo.Length; i++)
            {
                TreeNode newNode = new TreeNode(filesysteminfo[i].Name);
                newNode.Tag = filesysteminfo[i].FullName;
                node.Add(newNode);
                if (filesysteminfo[i] is DirectoryInfo)//目录
                {
                    DirectoryInfo newDic = new DirectoryInfo(filesysteminfo[i].FullName);
                    settreeView3(newDic, newNode.Nodes);//递归
                }
                else if (filesysteminfo[i] is FileInfo)//文件
                {
                    // node.Nodes.Add(filesysteminfo[i].Name);
                }


            }
        }

2.父节点选中子节点全部选中,子节点不全部选中,父节点颜色变灰,子节点全部不选中,父节点不选中(网上一位仁兄的代码)

  private void treeView2_AfterCheck(object sender, TreeViewEventArgs e)
        {
            if (e.Action != TreeViewAction.Unknown)
            {
                SetNodeCheckStatus(e.Node, e.Node.Checked);
                SetNodeStyle(e.Node);
            }
        }
        //父节点选中子节点全部选中
        private void SetNodeCheckStatus(TreeNode tn, bool Checked)
        {
            foreach (TreeNode tnChild in tn.Nodes)
            {
                tnChild.Checked = Checked;
                SetNodeCheckStatus(tnChild, Checked);
            }
        }
        // 子节点不全部选中,父节点颜色变灰,子节点全部不选中,父节点不选中
        private void SetNodeStyle(TreeNode Node)
        {
            int nNodeCount = 0;
            if (Node.Nodes.Count != 0)
            {
                foreach (TreeNode tnTemp in Node.Nodes)
                {


                    if (tnTemp.Checked == true)


                        nNodeCount++;
                }


                if (nNodeCount == Node.Nodes.Count)
                {
                    Node.Checked = true;
                    //Node.ExpandAll();
                    Node.ForeColor = Color.Black;
                }
                else if (nNodeCount == 0)
                {
                    Node.Checked = false;
                    //Node.Collapse();
                    Node.ForeColor = Color.Black;
                }
                else
                {
                    Node.Checked = true;
                    Node.ForeColor = Color.Gray;
                }
            }
            //当前节点选择完后,判断父节点的状态,调用此方法递归。  
            if (Node.Parent != null)
                SetNodeStyle(Node.Parent);
        }

3.获取所有选中节点

   private void button8_Click(object sender, EventArgs e)
        {
            List<TreeNode> listNodes = new List<TreeNode>();
            getCheckNode(treeView2.Nodes, listNodes);
            foreach (TreeNode node in listNodes)
            {
                str.Append(node.Text).Append("\n");
            }
            MessageBox.Show(str.ToString());
        }
        //获取所有选中节点
        private void getCheckNode(TreeNodeCollection TreeNode, List<TreeNode> listNodes)
        {
            foreach (TreeNode node in TreeNode)
            {
                if (node.Checked)
                {
                    listNodes.Add(node);
                    getCheckNode(node.Nodes, listNodes);
                }
            }


        }

0 0
原创粉丝点击