如何移除TreeView中的所有选中节点

递归方法 ,整体思路是:首先对根节点下的所有子节点做一个循环,在循环体里边,判断该子节点是否是叶节点,是的话就移除该节点,并且将子节点数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;

            }

        }

  }

 

你可能感兴趣的:(treeview)