use*_*558 8 c# treeview winforms
我有一组TreeView
控制节点和子节点.例如:
ROOT有A,B,C.
A具有a1,a2,a3,然后a1,a2也包含一些节点,如x1,x2,x3等.像这样很多子节点都在那里.我知道可以使用带有for循环的循环.
我只想TreeView
使用一个或两个for循环访问控制中的所有节点.
是否有任何算法或有其他方法吗?
还有一个问题:是否可以使用任何库函数在对象或字符串中创建树节点的路径?例如:
string S = TreeView1.Nodes[i].Nodes[j].Nodes
Run Code Online (Sandbox Code Playgroud)
不要使用嵌套循环,但要使用递归解决方案,例如:
void ListNodes( TreeNode node )
{
foreach( var subnode in node.Nodes )
{
ListNodes( subnode );
}
// Print out node
}
Run Code Online (Sandbox Code Playgroud)
为您的根节点调用此函数.
如有其他问题,请查看FullPath
酒店.
您可以使用递归函数遍历整个树:
private void Traverse(TreeNodeCollection nodes)
{
foreach (TreeNode node in nodes)
{
Console.WriteLine("{0} -> {1}", node.Name, node.FullPath);
Traverse(node.Nodes);
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用以下方法调用:
Traverse(treeView.Nodes);
Run Code Online (Sandbox Code Playgroud)
并且它将首先遍历整个树的深度(即,在移动到下一个兄弟之前尽可能深地下行).传入Nodes
集合意味着此代码将处理具有多个根节点的树.
上面的示例代码将打印出节点的名称以及树中该节点的完整路径.
我不是递归的最大粉丝,但似乎你必须使用它.我看到一个聪明的例子在线混合递归和迭代器.
private int GetLevels(TreeNodeCollection treeNodes)
{
int level = 0;
foreach (TreeNode node in TreeTopDown(treeNodes))
{
int i = node.Level;
if (i > level) level = i;
}
return level;
}
//TopDown Iterator
private IEnumerable<TreeNode> TreeTopDown(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
yield return node;
foreach (TreeNode subNode in TreeTopDown(node.Nodes)) yield return subNode;
}
}
//BottomUp Iterator
private IEnumerable<TreeNode> TreeBottomUp(TreeNodeCollection treeNodes)
{
foreach (TreeNode node in treeNodes)
{
foreach (TreeNode subNode in TreeBottomUp(node.Nodes)) yield return subNode;
yield return node;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15244 次 |
最近记录: |