请大家看看这句代码,加了红色框的那个方法,后面的代码竟然不执行。为什么?我写错了? 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);
}
{
//删除移动节点的相关信息
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);
}
解决方案 »
- 怎么判断当前是有线还是无线的网络
- [高分求解] 如何通过 webbrowser 复制网页中的图片到 image 变量中?
- 说一说关于c#的开发项目的经验,交流一下,
- 字符串比较
- 怎样设置 使得Datagridview 根据内容自动调整行高
- datagridview cell 验证问题
- There is no source code available for the current location.是什么错误?
- 熟悉tcp消息通訊的高手請幫忙,關於組裝消息包的實踐
- 在下初学C#,请各位推荐几本经典的C#书籍
- 绝对有价值的问题!!(太重要了)(200分重金悬赏)
- 如何编写软件中重置界面(工作区)
- C# 编程问题
但那个方法并不包含任何return啊
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));因为添加节点的代码有得到执行。
你可以把.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方法中找错误吧.
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");
执行到这句时,自动退出。怎么回事?