Если у меня есть 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 Еогеасп:
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);
}
}
}
Спасибо за всесторонний ответ! Я бы +10, если это возможно! –
Спасибо, очень благодарен :) – ng5000
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) –
Как сказал Кетил, «корневые узлы» - не правильный термин. Попробуйте использовать «листовые узлы». –
Единственная причина, по которой я использую термин «Root Node», это потому, что это термин, используемый в C# для добавления узлов в treeview. Спасибо за исправление «родительский узел». –