发布网友 发布时间:2022-10-07 15:33
共1个回答
热心网友 时间:2023-10-27 19:43
利用递归关键的是找出要删除节点的父节点(假如是C),找到父节点C之后继续利用递归找出C的父节点B,找到父节点B之后继续找出B的父节点A. . 还需要加一个判断,判断一下 父节点.Parent.Parent 看部分代码:string parentName=;;;private void 删除选中节点ToolStripMenuItem_Click(object sender, EventArgs e){try{TreeNode node = treeView1.SelectedNode.Parent;if (ChuLi.deleteNode(NodeId))//这个是我自己定义的方法,大家可以忽略{if (node != null)//如果是子节点不是根节点,那么就{parentName = node.Text;//的应该是父节点ExpandNodes(treeView1.Nodes);//调用-----------------------------------------}}else{MessageBox.Show(;删除失败!;);}}catch (Exception ex){MessageBox.Show(ex.Message);}}//遍历所有节点,找出指定节点private void ExpandNodes(TreeNodeCollection tnodes){foreach (TreeNode node in tnodes){if (node.Text == parentname)//比较判断,所以需要知道所选节点的父节点名字:node.Parent.Text{ExpandParentNodes(node.Parent.Nodes);//调用下一个递归方法}ExpandNodes(node.Nodes);}}//关键点所在private void ExpandParentNodes(TreeNodeCollection tnodes){TreeNode parentNode;foreach (TreeNode node in tnodes){parentNode = node;if (parentNode.Parent != null){parentNode.Parent.Expand();if (parentNode.Parent.Parent != null)//判断父节点的父节点是否为空,如果已经达到根节点就是null{ExpandParentNodes(parentNode.Parent.Parent.Nodes);}elsebreak;//已经达到根节点,退出}}}