Winform如何递归删除TreeView选中的节点?
Winform如何递归删除TreeView选中的节点?本文提供了两种方法,大家最常用的还是递归方法吧,本文还增加了一种非递归方法,有兴趣的同学也看看吧!先说C#递归方法,整体思路是:首先对根节点下的所有子节点做一个循环,在循环体里边,①判断该子节点是否是叶节点,是的话就移除该节点,并且将子节点数count减一,计数器i也减一,否则就递归调用方法traverse ( childNode )并重新获取该节点的子节点数(childCount = childNode.ChildNodes.Count;)②判断该节点的子节点数是否为0,是的话就移除该节点// 获得TreeView的根节点
TreeNode node = TreeView.Nodes [0];
// 递归方法
traverse ( node );
///<summary>
///递归移除所有选中的节点
///</summary>
///<param name="parentNode"></param>
private void traverse ( TreeNode parentNode )
{
int count = parentNode.ChildNodes.Count;
for ( int i = 0 ; i < count ; i++ )
{
TreeNode childNode = parentNode.ChildNodes [i];
// 移除之前的子节点数
int childCount = childNode.ChildNodes.Count;
// 移除算法
if ( childCount > 0 )
{
// 递归调用
traverse ( childNode );
// 移除之后剩余的子节点
childCount = childNode.ChildNodes.Count;
}
else if ( childNode.ChildNodes.Count == 0 && childNode.Checked )
{
// 您要做的其他操作
// 移除被选中的节点
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}
// 移除被选中的父节点(如果父节点的子节点数为0,父节点也要移除)
if ( childCount == 0 )
{
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}
}
}
Winform如何递归删除TreeView选中的节点?本文提供了两种方法,大家最常用的还是递归方法吧,本文还增加了一种非递归方法,有兴趣的同学也看看吧!先说C#递归方法,整体思路是:首先对根节点下的所有子节点做一个循环,在循环体里边,①判断该子节点是否是叶节点,是的话就移除该节点,并且将子节点数count减一,计数器i也减一,否则就递归调用方法traverse ( childNode )并重新获取该节点的子节点数(childCount = childNode.ChildNodes.Count;)②判断该节点的子节点数是否为0,是的话就移除该节点// 获得TreeView的根节点
TreeNode node = TreeView.Nodes [0];
// 递归方法
traverse ( node );
///<summary>
///递归移除所有选中的节点
///</summary>
///<param name="parentNode"></param>
private void traverse ( TreeNode parentNode )
{
int count = parentNode.ChildNodes.Count;
for ( int i = 0 ; i < count ; i++ )
{
TreeNode childNode = parentNode.ChildNodes [i];
// 移除之前的子节点数
int childCount = childNode.ChildNodes.Count;
// 移除算法
if ( childCount > 0 )
{
// 递归调用
traverse ( childNode );
// 移除之后剩余的子节点
childCount = childNode.ChildNodes.Count;
}
else if ( childNode.ChildNodes.Count == 0 && childNode.Checked )
{
// 您要做的其他操作
// 移除被选中的节点
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}
// 移除被选中的父节点(如果父节点的子节点数为0,父节点也要移除)
if ( childCount == 0 )
{
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}
}
}
2.还有下面两段代码是不是重复的,为啥我觉得else if完全可以删掉 else if ( childNode.ChildNodes.Count == 0 && childNode.Checked )
{
// 您要做的其他操作
// 移除被选中的节点
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}
// 移除被选中的父节点(如果父节点的子节点数为0,父节点也要移除)
if ( childCount == 0 )
{
parentNode.ChildNodes.Remove ( childNode );
--count;
--i;
}