选父节点做删除操作,只删除节点不为(*)号,树要保留原来结构
删除前:
|――1(*) 父节点
|――2-1(*)
|――3
|――4(*)
|――5
|――2-2删除后:
|――1(*) 父节点
|――2-1(*)
|――4(*)现在问题是,用了递归方法,找出了所有带(*)节点,
但如何重新构造树让它保持原来结构?
删除前:
|――1(*) 父节点
|――2-1(*)
|――3
|――4(*)
|――5
|――2-2删除后:
|――1(*) 父节点
|――2-1(*)
|――4(*)现在问题是,用了递归方法,找出了所有带(*)节点,
但如何重新构造树让它保持原来结构?
我得想法是把所有带(*)的节点找到后COPY一份,然后直接删除父节点,
但树结构还原还没想到办法.....
{
//遍历子节点
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);
/// <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);
} }
}