我试图用(A)计算树节点的数量,而没有后续的子节点(B)。例如,下面的图像应返回2/1。
我尝试使用TreeView
方法,但无法弄清楚如何使用更深层次的节点。
private void tvResources_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
int a=0,b=0;
foreach (TreeNode node in e.Node.Nodes)
{
if (e.Node.Nodes.Contains(node))
a += 1;
else
b += 1;
}
e.Node.Text += @" - " + a+"/"+b;
}
这可以通过一些递归函数来完成,但有没有更简单的解决方案?
答案 0 :(得分:1)
如果您只需要当前节点(扩展前),您可以使用foreach
循环来检查每个直接子节点的节点数,这将直接为您提供答案。
private void tvResources_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
CalculateAB( e.Node );
}
private void CalculateAB( TreeNode node )
{
int a = 0;
int b = 0;
foreach ( TreeNode child in node.Nodes )
{
if ( child.Nodes.Count() > 0 )
{
a++;
}
else
{
b++;
}
}
node.Text += @" - " + a + "/" + b;
}
如果要一次计算整个TreeView
的值,则可以使用递归。您可以使用深度优先搜索并使用a/b
方法计算遇到的所有节点的CalculateAB
值。
private void CalculateForTree( TreeNode root )
{
foreach ( var child in root.Nodes )
{
CalculateForTree( child );
}
CalcualteAB( root );
}