选父节点做删除操作,只删除节点不为(*)号,树要保留原来结构
删除前:
|――1(*) 父节点
  |――2-1(*)
     |――3
       |――4(*)
          |――5
  |――2-2删除后:
|――1(*) 父节点
  |――2-1(*)
     |――4(*)现在问题是,用了递归方法,找出了所有带(*)节点,
但如何重新构造树让它保持原来结构?

解决方案 »

  1.   

    直接不行,要是你把3节点删掉了,那下面的4,5节点都没了,结果就不对了
    我得想法是把所有带(*)的节点找到后COPY一份,然后直接删除父节点,
    但树结构还原还没想到办法.....
      

  2.   

    void test(TreeNodeCollection currentNodes,TreeNodeCollection targetNodes)
    {   
       //遍历子节点
       foreach(TreeNode tmp in currentNodes)
       {
          bool isStar = false;//判断当前节点是否带*,但是先不要删除
          if(isStar && (currentNodes!=mNodes))
          {
            //将tmp加(复制)到target里
          }
          TreeNodeCollection mNodes = targetNodes;
           if(isStar) mNodes = tmp.Nodes;
          //递归调用
          test(tmp.Nodes,mNodes);      if(!isStar){//删除tmp}
       }
    }
    ========
    开始执行  test(treeView1.Nodes,TreeView1.Nodes);
      

  3.   

    问题基本解决了代码如下,大家看看
    /// <summary>
    /// 取得集計部門
    /// </summary>
    /// <param name="parenet">主ノード</param>
    /// <param name="NewTree">当前ノード</param>
    private void GetSyuukeiBumon(TreeNode parenet,TreeNode NewTree)
    {
    foreach(TreeNode tnNode in parenet.Nodes)
    {
    //集計部門の場合
    if( tnNode.SelectedImageIndex == 4 )
    {

    bool bPutRoot = false;
    int iPostition = tnNode.FullPath.  Split('\\').Length - 1;
    TreeNode tnCheckNode = tnNode;
    for( int i = iPostition ; i > 1 ; i-- )
    {
    tnCheckNode = tnCheckNode.Parent;
    //父ノードは部門である場合
    if( tnCheckNode.SelectedImageIndex != 4 )
    {
    bPutRoot = true;
    break;
    }
    } TreeNode tnAdd = new TreeNode( tnNode.Text,4,4 ); //追加ノード
    if( !bPutRoot )
    {
    NewTree.Nodes.Add(tnAdd);
    }
    //外ノード
    else
    {
    _outOfTreeNode.Add(tnAdd);
    }
    GetSyuukeiBumon(tnNode,tnAdd);
    }
    else
    {
    GetSyuukeiBumon(tnNode,NewTree);
    } }
    }