mod*_*diX 23
您可以使用两种递归扩展方法.你可以打电话myTreeView.GetAllNodes()
或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.Nodes)
{
result.AddRange(child.GetAllNodes());
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
Kru*_*lur 17
假设您有一个具有一个根节点的树,以下代码将始终将树节点循环到最深处,然后返回一个级别,依此类推.它将打印每个节点的文本.(从头顶未经测试)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
懒惰的LINQ方法,以防万一你正在寻找这样的东西:
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;
}
Run Code Online (Sandbox Code Playgroud)
更新Krumelur的答案(用此替换他/她的解决方案的2个第一行):
foreach ( var node in oYourTreeView.Nodes )
{
PrintNodesRecursive( node );
}
Run Code Online (Sandbox Code Playgroud)