请大家看看这句代码,加了红色框的那个方法,后面的代码竟然不执行。为什么?我写错了?            else if (moveNode.Parent != null)//当移动的是子级
            {
                //删除移动节点的相关信息
                string theptext = null;
                if (targeNode.Parent == null)//放置的是总级节点
                {
                    if (moveNode.Parent == targeNode)//当放置的是当前子级的总级。则直接添加至总级末尾。
                    {
                        if (targeNode.Nodes.Count - 1 != moveNode.Index) targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);
                        return;
                    }                    foreach (TreeNode node in targeNode.Nodes)
                    {
                        if (moveNode.Text.CompareTo(node.Text) == 0)
                        {                            MessageBox.Show("警告:\n\n  <" + targeNode.Text + ">已存在相同名称的节点(\"" + moveNode.Text + "\")!子级节点不允许名称重复!", "提示");
                            treeView1.SelectedNode = moveNode;
                            return;
                        }
                    }
                    targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode);
                    theptext = targeNode.Text;
                }
                else if (targeNode.Parent != null)//放置的是子级位置
                {
                    if (moveNode == targeNode) return;//位置不变,不进行操作。
                        
                    if (targeNode.Parent != moveNode.Parent && TraverseTreeNode(targeNode, moveNode.Text))
                    {
                        MessageBox.Show("警告:\n\n  <" + targeNode.Parent.Text + ">已存在相同名称的节点(\"" + moveNode.Text + "\")!子级节点不允许名称重复!", "提示");
                        treeView1.SelectedNode = moveNode;
                        return;
                    }                    if (targeNode == moveNode.PrevNode)
                        c = moveNode.PrevNode.Index;
                    targeNode.Parent.Nodes.Insert(c, NewMoveNode);
                    theptext = targeNode.Parent.Text;
                }                tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text));
            }            //展开目标节点,便于显示拖放效果
            if (moveNode.IsExpanded == true)
                NewMoveNode.Expand();
            //更新当前拖动的节点选择            treeView1.SelectedNode = NewMoveNode;
            //移除拖放的节点
            moveNode.Remove();
        }
-----------------------tvXML--------------------------
        /// <summary>
        /// 将子级移至另一个总级。(也可用于修改子级名称)
        /// </summary>
        /// <param name="TheNode">要移动的子级。</param>
        /// <param name="ParentText">移至的父级(Null:父级不变)。</param>
        /// <param name="NodeText">子级的新名称(Null:子级不变)。</param>
        /// <param name="FileText">子级的目录。</param>
        internal void MoveNode(TreeNode TheNode, string ParentText, string NodeText, string FileText)
        {
            if (FileText == TreeViewAndXML.NodeFiles + TheNode.Parent.Text + "\\" + TheNode.Text + ".rtf")
            {
                if (ParentText == null) ParentText = TheNode.Parent.Text;
                else if (NodeText == null) NodeText = TheNode.Text;
                FileText = TreeViewAndXML.NodeFiles + ParentText + "\\" + NodeText + ".rtf";
                System.IO.File.Move(TreeViewAndXML.NodeFiles + TheNode.Parent.Text + "\\" + TheNode.Text + ".rtf", FileText);
                //MessageBox.Show(FileText);
            }
            AllNode.Remove(TheNode.Parent.Text + TreeViewAndXML.SignText + TheNode.Text);
            AllNode.Add(ParentText + TreeViewAndXML.SignText + NodeText, FileText);
        }

解决方案 »

  1.   

    被return?我尝试将红色代码注释,却没return
    但那个方法并不包含任何return啊
      

  2.   

    上面被return了.那么多判断条件,一个符合的就return了
      

  3.   

    设断点调吧 像这种上边条件多的 不知道哪种情况就return了
      

  4.   

                        targeNode.Nodes.Insert(targeNode.Nodes.Count, NewMoveNode); 
                        theptext = targeNode.Text; 
                    } 
                    else if (targeNode.Parent != null)//放置的是子级位置 
                    { 
                        if (moveNode == targeNode) return;//位置不变,不进行操作。 
                            
                        if (targeNode.Parent != moveNode.Parent && TraverseTreeNode(targeNode, moveNode.Text)) 
                        { 
                            MessageBox.Show("警告:\n\n   <" + targeNode.Parent.Text + ">已存在相同名称的节点(\"" + moveNode.Text + "\")!子级节点不允许名称重复!", "提示"); 
                            treeView1.SelectedNode = moveNode; 
                            return; 
                        }                     if (targeNode == moveNode.PrevNode) 
                            c = moveNode.PrevNode.Index; 
                        targeNode.Parent.Nodes.Insert(c, NewMoveNode); 
                        theptext = targeNode.Parent.Text; 
                    }                 tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text)); 红色区域的代码有执行,也就是说,treeView上有添加或插入节点。但接下去的,删除旧节点,却无法实现。
                    tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text)); 
                }             //展开目标节点,便于显示拖放效果 
                if (moveNode.IsExpanded == true) 
                    NewMoveNode.Expand(); 
                //更新当前拖动的节点选择             treeView1.SelectedNode = NewMoveNode; 
                //移除拖放的节点 
                moveNode.Remove();这段代码没获得执行,假如说,是被return了,那么错误肯定出在                tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text));因为添加节点的代码有得到执行。
      

  5.   

    方法中的代码中出现的异常,但是其没有try/catch, 就跳到了红色代码所在的方法,由于其仍然没有try/catch,就又往外跳了.
    你可以把.tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text)); 改成 try

      tvXML.MoveNode(moveNode, theptext, moveNode.Text, tvXML.GetFile(moveNode.Parent.Text, moveNode.Text)); 
    }
    catch
    {
       MessageBox.Show("Error!");
    }看看是不是出现Error了.如果是,就去你MoveNode方法中找错误吧.
      

  6.   

                MessageBox.Show("调用函数true");
                if (FileText == TreeViewAndXML.NodeFiles + TheNode.Parent.Text + "\\" + TheNode.Text + ".rtf")
                {
                    if (ParentText == null) ParentText = TheNode.Parent.Text;
                    else if (NodeText == null) NodeText = TheNode.Text;
                    FileText = TreeViewAndXML.NodeFiles + ParentText + "\\" + NodeText + ".rtf";
                    MessageBox.Show("进入判断true");
                    System.IO.File.Move(TreeViewAndXML.NodeFiles + TheNode.Parent.Text + "\\" + TheNode.Text + ".rtf", FileText);
                    MessageBox.Show("移动文件true");
                }
                AllNode.Remove(TheNode.Parent.Text + TreeViewAndXML.SignText + TheNode.Text);
                MessageBox.Show("删除子级true");
                AllNode.Add(ParentText + TreeViewAndXML.SignText + NodeText, FileText);
                MessageBox.Show("添加子级true");经调试,
                    MessageBox.Show("进入判断true");
                    System.IO.File.Move(TreeViewAndXML.NodeFiles + TheNode.Parent.Text + "\\" + TheNode.Text + ".rtf", FileText);
                    MessageBox.Show("移动文件true");
    执行到这句时,自动退出。怎么回事?