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

#结构体实现-节点
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);
网友评论