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