C# TreeView的帮助类

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuliqi0429/article/details/51006143

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Desktop.Tools
{
    public class TreeViewHelper
    {
        /// <summary>
        /// 设置选中状态
        /// </summary>
        /// <param name="treeNode"></param>
        /// <param name="b"></param>
        public void CheckedParentToCheckAllChildren(TreeNode treeNode, bool b)
        {

            if (treeNode.Nodes.Count > 0)
            {
                foreach (TreeNode t in treeNode.Nodes)
                {
                    t.Checked = b;
                    CheckedParentToCheckAllChildren(t, b);
                }
            }
            else
            {
                treeNode.Checked = b;
            }
            if (treeNode.Parent != null)
            {
                if (treeNode.Parent.Parent != null)
                {
                    bool d = false;
                    foreach (TreeNode t in treeNode.Parent.Nodes)
                    {
                        if (t.Checked == true)
                        {
                            d = true;
                            break;
                        }
                    }
                    treeNode.Parent.Checked = d;
                }
            }
        }

        /// <summary>
        /// 根据节点的名字查找节点
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public TreeNode FindNodeByName(TreeView tree, string name)
        {
            TreeNodeCollection tc = tree.Nodes;
            TreeNode ret = null;
            foreach (TreeNode t in tc)
            {
                ret = FindNodeByName(t,name);
                if (ret != null) { break; }
            }
            return ret;
        }

        /// <summary>
        /// 根据节点的名字查找节点
        /// </summary>
        /// <param name="t"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public TreeNode FindNodeByName(TreeNode t, string name)
        {
            TreeNode ret = null;
            if (t.Name == name)
            {
                return t;
              
            }
            else
            {
                if (t.Nodes.Count > 0)
                {
                    TreeNodeCollection tc = t.Nodes;
                    foreach (TreeNode tn in tc)
                    {
                        ret = FindNodeByName(tn,name);
                        if (ret != null) { break; }
                       
                    }
                }
            }
            return ret;
        }

        /// <summary>
        /// 根据节点显示查找节点
        /// </summary>
        /// <param name="tree"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public TreeNode FindNodeByText(TreeView tree, string text)
        {
            TreeNodeCollection tc = tree.Nodes;
            TreeNode ret = null;
            foreach (TreeNode t in tc)
            {
                ret = FindNodeByText(t, text);
                if (ret != null) { break; }
            }
            return ret;
        }

        /// <summary>
        /// 根据节点显示查找节点
        /// </summary>
        /// <param name="t"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public TreeNode FindNodeByText(TreeNode t, string text)
        {
            TreeNode ret = null;
            if (t.Text == text)
            {
                return t;

            }
            else
            {
                if (t.Nodes.Count > 0)
                {
                    TreeNodeCollection tc = t.Nodes;
                    foreach (TreeNode tn in tc)
                    {
                        ret = FindNodeByText(tn, text);
                        if (ret != null) { break; }

                    }
                }
            }
            return ret;
        }
		
		/// <summary>
		/// 获取复选框已经选中的node的显示文字
        /// </summary>
        /// <param name="treeView">控件</param>
        /// <returns></returns>
        public string GetAllCheckedNodesName(TreeView treeView)
        {
            string str = string.Empty;
            TreeNodeCollection tnc = treeView.Nodes[0].Nodes;
            foreach (TreeNode node in tnc)
            {
                str += GetAllCheckedNodesName(node);
            }
            return str;
        }

        /// <summary>
        /// 获取复选框已经选中的node的显示文字
        /// </summary>
        /// <param name="treeNode">节点</param>
        /// <returns></returns>
        public string GetAllCheckedNodesName(TreeNode treeNode)
        {
            string str = string.Empty;
            if (treeNode.Checked)
            {
                str = str + "," + treeNode.Text;
                if (treeNode.Nodes.Count > 0)
                {
                    TreeNodeCollection trc = treeNode.Nodes;
                    foreach(TreeNode node in trc)
                    {
                        str += GetAllCheckedNodesName(node);
                    }
                }
            }

            return str;
        }
    }
}




由于获取复选框选中节点的名字方法返回的字符串中是由“,”分割的所以字符串的第一个也是“,”

所以还需要这样的一部分代码


TreeViewHelper helper = new TreeViewHelper();
string str= helper.GetAllCheckedNodesName(treeView1);
if(str.StartsWith(","))
{ str = str.Substring(1, str.Length - 1); }


猜你喜欢

转载自blog.csdn.net/yuliqi0429/article/details/51006143