Jak uzyskać listę wszystkich węzłów drzewa (na wszystkich poziomach) w formancie TreeView
?Uzyskaj listę wszystkich węzłów drzewa (na wszystkich poziomach) w kontrolkach TreeView
Odpowiedz
Zakładając, że masz drzewo z jednym węzłem głównym, poniższy kod zawsze zapętnieje węzły drzew w dół do najgłębszych, a następnie cofnie się o jeden poziom wstecz i tak dalej. Wypisze tekst każdego węzła. (Nietestowane od szczytu głowy)
TreeNode oMainNode = oYourTreeView.Nodes[0];
PrintNodesRecursive(oMainNode);
public void PrintNodesRecursive(TreeNode oParentNode)
{
Console.WriteLine(oParentNode.Text);
// Start recursion on all subnodes.
foreach(TreeNode oSubNode in oParentNode.Nodes)
{
PrintNodesRecursive(oSubNode);
}
}
Update do odpowiedzi Krumelur użytkownika (zamiast 2 pierwsze linie jego/jej rozwiązania z tym):
foreach (var node in oYourTreeView.Nodes)
{
PrintNodesRecursive(node);
}
Tak, to wypluje wszystkie poddrzewa, jeśli istnieje kilka korzeni. Ale tak naprawdę: drzewo z kilkoma węzłami jest naprawdę rzadkie :-) Aha, i to jest "jego";) – Krumelur
W rzeczywistości jest to dość powszechna phaenommena :) W programowaniu mogę sobie wyobrazić kilka scenariuszy gdzie jest to przydatne. Na przykład: widok drzewa zawierający działy firmy, z których każda ma podjednostki i tak dalej. Prawdopodobnie nie będziesz mieć żadnego superdepartetu. – dzendras
Masz rację. Poprawiłem odpowiedź. Był literówka. – Krumelur
podejścia Lazy LINQ, tak na wszelki wypadek Szukamy czegoś takiego:
private void EnumerateAllNodes()
{
TreeView myTree = ...;
var allNodes = myTree.Nodes
.Cast<TreeNode>()
.SelectMany(GetNodeBranch);
foreach (var treeNode in allNodes)
{
// Do something
}
}
private IEnumerable<TreeNode> GetNodeBranch(TreeNode node)
{
yield return node;
foreach (TreeNode child in node.Nodes)
foreach (var childChild in GetNodeBranch(child))
yield return childChild;
}
Można użyć dwóch metod rekurencyjnego rozszerzenia. Można też zadzwonić myTreeView.GetAllNodes()
lub myTreeNode.GetAllNodes()
:
public static List<TreeNode> GetAllNodes(this TreeView _self)
{
List<TreeNode> result = new List<TreeNode>();
foreach (TreeNode child in _self.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
public static List<TreeNode> GetAllNodes(this TreeNode _self)
{
List<TreeNode> result = new List<TreeNode>();
result.Add(_self);
foreach (TreeNode child in _self.ChildNodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
Ponieważ TreeView ma wiele poziomów, zrobić rekurencyjną funkcję:
public void AddNodeAndChildNodesToList(TreeNode node)
{
listBox1.Items.Add(node.Text); // Adding current nodename to ListBox
foreach (TreeNode actualNode in node.Nodes)
{
AddNodeAndChildNodesToList(actualNode); // recursive call
}
}
niż wywołać tę funkcję dla wszystkich węzłów poziom pierwszy w TreeView:
foreach (TreeNode actualNode in treeView1.Nodes) // Begin with Nodes from TreeView
{
AddNodeAndChildNodesToList(actualNode);
}
Kod jest z witryny C# TreeView
Jeśli nie potrzebujesz klucza węzła, aby był unikalny, po prostu ustaw wszystkie klucze węzłów na pusty ciąg znaków (""
), następnie możesz wykonać Treeview1.Nodes.Find("", true);
, aby zwrócić wszystkie węzły w obrębie TreeView.
- 1. Jak uzyskać listę wszystkich węzłów podrzędnych w TreeView w .NET
- 2. C++: Suma wartości wszystkich węzłów drzewa binarnego
- 3. lista wszystkich poziomach Czynnikiem data.frame
- 4. Uzyskaj listę wszystkich naciśnięć z Git
- 5. Najkrótsza ścieżka do odwiedzenia wszystkich węzłów
- 6. NSOutlineView - Automatyczne rozwijanie wszystkich węzłów
- 7. Uzyskaj listę wszystkich serwerów druku w domenie w języku C#
- 8. JTree: Zaznaczanie wszystkich węzłów programowo
- 9. javascript, uzyskaj listę wszystkich wartości w polu wyboru
- 10. Uzyskaj listę wszystkich plików wewnątrz katalogu w vb.net
- 11. Kendo Treeview Rozszerzanie dużego drzewa wydania
- 12. Jak wybrać wiele węzłów na różnych poziomach?
- 13. Wirtualizacja drzewa WPF TreeView
- 14. Uzyskaj listę wszystkich prywatnych kanałów z API Slack
- 15. Uzyskaj listę wszystkich funkcji, które są wywoływane przez inną funkcję
- 16. Uzyskaj nazwy wszystkich uchwytów w bieżącym procesie
- 17. Uzyskaj identyfikatory wszystkich obiektów na liście
- 18. Lista wszystkich węzłów podrzędnych węzła nadrzędnego w formantu widoku drzewa w języku Visual C#
- 19. C#: Pobieranie wszystkich węzłów dokumentu XML
- 20. Wyświetl listę wszystkich zainstalowanych aplikacji.
- 21. Wyświetl listę wszystkich właściwości obiektu
- 22. Jak wyczyścić model JTree? (Usuwanie wszystkich węzłów)
- 23. Uzyskaj wszystkich rodziców dla dziecka
- 24. Uzyskaj ścieżki wszystkich odwoływanych zespołów
- 25. Jak uzyskać listę wszystkich rozszerzonych właściwości dla wszystkich obiektów
- 26. Wyświetl listę wszystkich testów w projekcie Django
- 27. Pobierz listę wszystkich importów w projekcie Haskell
- 28. Jak wyświetlić listę wszystkich pakietów w Nuget
- 29. Uzyskaj wszystkich członków w posortowanym zestawie
- 30. Uzyskaj wartości według nazwy właściwości z obiektu na różnych poziomach.
Jeśli odpowiedź jest satysfakcjonująca, byłoby dobrze, gdybyś ją zaakceptował. Dzięki. – Krumelur