我有一个自定义结构,它包含节点信息(level,index,childCount),结构按顺序存储在二进制文件中。现在,我需要从文件重建TreeView,我得到了结构[],但坚持将结构转换为节点。这是一个图像,图像的左侧部分代表结构数组,与二进制文件结构相同。正确的部分是我想要构建的TreeView。 enter image description here
我只希望有人可以给我一个关于递归函数的提示,因为我还在学习C#:)感谢。
答案 0 :(得分:0)
我认为你可以使用Name字段和Find函数。 Name是键,Find函数按名称字段查找节点。 首先,您需要为每个节点保存唯一键值。然后你会的 按键查找节点并制作层次结构
这是sudo代码,
Treeview myTreeView = new Treeview();
TreeNode parentNode = new TreeNode(); // maybe it will index = 1 , level = 0 in your image
parentNode.Name = "uniquevaule";
myTreeView.nodes.add(parentNode);
TreeNode childNode = new TreeNode(); // maybe it will index = 0 , level = 1
childNode.Name = "child";
TreeNode[] nodes = myTreeView.Nodes.Find("uniquevaule", true);
nodes[0].add(childNode);
答案 1 :(得分:0)
我所做的功能假设水平总是从你提供的图像开始在0级。
此函数还假定在0级项目之后,任何大于0的级别值都将被视为先前遇到的级别0项目的子节点。
我在这里做的是,我已经根据你的结构创建了一个TreeNodes列表和一个Levels列表,并且如果检测到一个级别大于最初提供的级别,它将基于级别循环遍历列表,将进行递归调用以处理子级别。
public List<TreeNode> MainNodes(List<Levels> strut, int level){
List<TreeNode> parentNode = new List<TreeNode>();
for(int x = 0; x< strut.Count; x++){
var data = strut[x];
if(data.Level == level){
TreeNode nodeC = new TreeNode();
nodeC.Name = strut[x].Index.ToString(); //Index value from struct
if(x + 1 < strut.Count){
if(strut[x+1].Level > level){
var newArray = new List<Levels>(strut);
newArray.RemoveAt(x);
nodeC.Nodes.AddRange(MainNodes(newArray, level + 1);
}
}
parentNode.Add(nodeC);
}
}
return parentNode;
}