美文网首页
C# 树形控件 递归篇

C# 树形控件 递归篇

作者: 南土酱 | 来源:发表于2020-12-15 17:52 被阅读0次

从这一篇开始,针对 树形控件 递归篇进行总结。
未看过前一篇的新手,可以看我前一篇文章,入口: https://www.jianshu.com/p/99005b18673c
首先声明一个 root

image.png
#结构体实现-节点
struct nodesName
{
//标签
    public string t;
//名称
    public string n;
//子节点 数组,因为子节点可以有多个
    public nodesName[] znodes;
//用于给 子节点设置的方法,因为 nNodes 方法 无法赋值  子节点
    public void setValues(string tt,string nn, nodesName[] c)
    {
        t = tt;
        n = nn;
        znodes = c;
    }
};
        //终极节点创建,用来保存 节点数据,作为 节点备份。
        private static nodesName publicRoot = new nodesName();
        //食材管理节点,(例子)
        static void scglCreat(){
            //子节点组建
            nodesName gys = nNodes("供应商", "gys");
            nodesName clist = nNodes("食材清单", "scl");
            nodesName[] child2 = new nodesName[] { gys, clist };
            nodesName croot = nNodes("采购", "cg");
            nodesName gf = new nodesName();
            gf.setValues("具体查看", "jt", child2);
            //中介点,结构体即可做单个对象,也可以是 数组
            nodesName[] child = new nodesName[] { croot, gf };
            //根节点,在把 数组 作为子节点 赋给  publicroot 备份节点
            publicRoot.setValues("食材管理", "scgl", child);
}
//该方法用来生成一个新的 node 节点
public static nodesName nNodes(string n,string mark)
        {
            nodesName c = new nodesName();
            c.setValues(n, mark, null);
            return c;
        }
# 开始添加节点,先判断是否为空
此时传入的 root 是 树形控件的 root,这部分不重要,只是用来对  root 树形控件进行赋值
public void addFun(TreeNode root)
        {
            if (publicRoot.znodes != null)
            {
                root.Text = publicRoot.t;
                root.Name = publicRoot.n;
从 publicroot 备份节点的 子节点数组开始 递归 
                FunDiGui(publicRoot.znodes, root);
            }
        }
开始递归,利用 publicroot 备份节点的 特殊结构 与 root 节点 的 Add()方法 实现 添加子孙节点。
请仔细阅读代码
private void FunDiGui(nodesName[] c, TreeNode father)
        {
            if (c != null){
                int ind = c.Length;
                if (ind != 0)
                {
                    for (int i = 0; i < ind; i++)
                    {
                        TreeNode t = new TreeNode();
                        t.Name = c[i].n;
                        t.Text = c[i].t;
                        father.Nodes.Add(t);
                        FunDiGui(c[i].znodes , t);
                    }
                }
            }
        }

最后,需要先 创建好 备份节点,调用 scglCreat()函数,在 开始 递归程序。
下边是运行代码,这里我给出自己的调用方法,只需要 #核心 这两部分即可

public void addChildtree(TreeNode root,int orderIndex)
        {
            this.clearTree(root);
            
            switch (orderIndex)
            {
                case 0:
                  #核心
                    scglCreat();
                  #核心
                    addFun(root);

\color{#228B22}{Linux 学习小总结,不对之处,欢迎大神们喷我。可以的话顺手点个赞吧~~!}
\color{red}{警: 禁止抄袭,转载说明出处 🤨}

相关文章

网友评论

      本文标题:C# 树形控件 递归篇

      本文链接:https://www.haomeiwen.com/subject/tevwgktx.html