1
如果我有一个TreeView(myTreeview),如何获取所有父节点的节点列表?即有子女的节点c#获取TreeView父节点的列表
如果我有一个TreeView(myTreeview),如何获取所有父节点的节点列表?即有子女的节点c#获取TreeView父节点的列表
myTreeview.Nodes将为您提供MS定义的根节点列表,这些节点基本上是指树的根分支上的节点。
该代码将建立根节点的儿童名单:
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
foreach(TreeNode node in myTreeview.Nodes)
if(node.Nodes.Count > 0) nodesWithChildren.Add(node);
更新:如果你想在那有一个孩子TreeView中的所有节点,无论有多深成树,然后使用一点递归,例如
private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
{
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
foreach(TreeNode node in treeView.Nodes )
AddParentNodes(nodesWithChildren, node);
return nodesWithChildren;
}
private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNode parentNode)
{
if (parentNode.Nodes.Count > 0)
{
nodesWithChildren.Add(parentNode);
foreach(TreeNode node in parentNode.Nodes)
AddParentNodes(nodesWithChildren, node);
}
}
更新2:递归方法只有1 foreach循环:
private static IList<TreeNode> BuildParentNodeList(TreeView treeView)
{
IList<TreeNode> nodesWithChildren = new List<TreeNode>();
AddParentNodes(nodesWithChildren, treeView.Nodes);
return nodesWithChildren;
}
private static void AddParentNodes(IList<TreeNode> nodesWithChildren, TreeNodeCollection parentNodes)
{
foreach (TreeNode node in parentNodes)
{
if (node.Nodes.Count > 0)
{
nodesWithChildren.Add(node);
AddParentNodes(nodesWithChildren, node.Nodes);
}
}
}
private void AddNonLeafNodes(List<TreeNode> nonLeafNodes, TreeNodeCollection nodes)
{
foreach(TreeNode node in nodes)
{
if(node.Nodes.Count > 0)
{
nonLeafNodes.Add(node);
AddNonLeafNodes(nonLeafNodes,node.Nodes);
}
}
}
List<TreeNode> nonLeafNodes = new List<TreeNode>();
AddNonLeafNodes(nonLeafNodes,treeView1.Nodes);
您使用的术语“根节点”的方式是不该术语通常使用的方式计算机科学。更多细节: http://en.wikipedia.org/wiki/Tree_(data_structure) – 2009-02-18 11:49:57
正如Kjetil所说,“根节点”不是正确的术语。尝试使用“叶节点”。 – 2009-02-18 12:05:10