C# 如何为每个根节点子节点创建列表列表? 使用系统; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 使用System.Windows.Forms; 名称空间对话系统 { 公共部分类Form1:Form { List allnodes=new List(); 公共表格1() { 初始化组件(); 对于(int i=0;i
如果列表中的所有节点如下所示:C# 如何为每个根节点子节点创建列表列表? 使用系统; 使用System.Collections.Generic; 使用系统组件模型; 使用系统数据; 使用系统图; 使用System.Linq; 使用系统文本; 使用System.Threading.Tasks; 使用System.Windows.Forms; 名称空间对话系统 { 公共部分类Form1:Form { List allnodes=new List(); 公共表格1() { 初始化组件(); 对于(int i=0;i,c#,winforms,C#,Winforms,如果列表中的所有节点如下所示: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Dialog_Sy
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Dialog_System
{
public partial class Form1 : Form
{
List<List<TreeNode>> allnodes = new List<List<TreeNode>>();
public Form1()
{
InitializeComponent();
for(int i = 0; i < advancedTreeView1.Nodes.Count; i++)
{
PrintNodesRecursive(advancedTreeView1.Nodes[i]);
}
}
public List<TreeNode> PrintNodesRecursive(TreeNode oParentNode)
{
allnodes.Add(oParentNode);
// Start recursion on all subnodes.
foreach (TreeNode oSubNode in oParentNode.Nodes)
{
PrintNodesRecursive(oSubNode);
}
return allnodes;
}
}
}
List allnodes=new List();
结果是:
但我希望根节点0将是一个列表,它与他的孩子们在一起。
然后根节点1也是它自己的子节点的列表。
等等因此,在列表中,我将列出每个根节点及其子节点的所有节点
例如,在根节点0下,应该侦听节点3、4、5,而列表不适用于此,因为级别数是预先给定的,并且始终为2。必须创建一个可以接受值和子项列表的类
List<TreeNode> allnodes = new List<TreeNode>();
我们面临的一个问题是,TreeView
中没有根节点,因为TreeView本身不是节点。因此,我使用的技巧是创建一个表示整个TreeView
的虚拟TreeNode
public Node<TreeNode> CloneRecursive(TreeNode treeNode)
{
var node = new Node<TreeNode> { Value = treeNode };
foreach (TreeNode subTreeNode in treeNode.Nodes) {
node.Children.Add(CloneRecursive(subTreeNode));
}
return node;
}
var rootNode=newtreenode(“根”,AdvancedTreeView.Nodes.Cast().ToArray());
节点克隆=CloneRecursive(rootNode);
列出所有节点=clone.Children;
或者,我们可以通过循环调整您的解决方案:
var rootNode = new TreeNode("root", advancedTreeView1.Nodes.Cast<TreeNode>().ToArray());
Node<TreeNode> clone = CloneRecursive(rootNode);
List<Node<TreeNode>> allnodes = clone.Children;
List allnodes=new List();
foreach(高级TreeView.Nodes中的TreeNode TreeNode){
Add(CloneRecursive(treeNode));
}
另一种可能是只存储节点文本(这是可能的,因为我们的节点类是泛型的)
public Node clonetextracrovive(TreeNode TreeNode)
{
var节点=新节点{Value=treeNode.Text};
foreach(TreeNode.Nodes中的TreeNode子屏幕){
node.Children.Add(CloneTextRecursive(subTreeNode));
}
返回节点;
}
此行在foreach中获取错误:allnodes.Add(CloneRecursive(treeNode));无法从“Form1.Node”转换为“System.Windows.Forms.TreeNode”,因为所有节点
必须键入为列表
(不仅仅是列表
)。或者,您可以使节点
非泛型。然后这将成为列表
。
var rootNode = new TreeNode("root", advancedTreeView1.Nodes.Cast<TreeNode>().ToArray());
Node<TreeNode> clone = CloneRecursive(rootNode);
List<Node<TreeNode>> allnodes = clone.Children;
List<Node<TreeNode>> allnodes = new List<Node<TreeNode>>();
foreach (TreeNode treeNode in advancedTreeView1.Nodes) {
allnodes.Add(CloneRecursive(treeNode));
}
public Node<string> CloneTextRecursive(TreeNode treeNode)
{
var node = new Node<string> { Value = treeNode.Text };
foreach (TreeNode subTreeNode in treeNode.Nodes) {
node.Children.Add(CloneTextRecursive(subTreeNode));
}
return node;
}