private void treeView1_DragDrop(object sender, DragEventArgs e)
{
//判断拖动的是否为TreeNode类型,不是的话不予处理
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
var treeView = sender as TreeView;
// 获取当前光标所处的坐标
// 定义一个位置点的变量,保存当前光标所处的坐标点
Point point = treeView.PointToClient(new Point(e.X, e.Y));
// 根据坐标点取得目标节点
TreeNode targetNode = treeView.GetNodeAt(point);
// 获取被拖动的节点
var dragedNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
// 判断拖动的节点与目标节点是否是同一个,同一个不予处理
if (dragedNode != targetNode)
{
if (targetNode != null)
{
// 将被拖动的节点移除
dragedNode.Remove();
var dragedObj = dragedNode.Tag as SceneObject;
if (dragedObj.Parent != null)
{ dragedObj.Parent.Children.Remove(dragedObj); }
else
{ this.scene.RootObject.Children.Remove(dragedObj); }
//treeNodeObj.Parent = null;
// 往目标节点中加入被拖动节点的一份克隆
targetNode.Nodes.Add(dragedNode);
var targetObj = targetNode.Tag as SceneObject;
targetObj.Children.Add(dragedObj);
targetNode.ExpandAll();
}
else
{
dragedNode.Remove();
var dragedObj = dragedNode.Tag as SceneObject;
if (dragedObj.Parent != null)
{ dragedObj.Parent.Children.Remove(dragedObj); }
else
{ this.scene.RootObject.Children.Remove(dragedObj); }
treeView.Nodes.Add(dragedNode);
this.scene.RootObject.Children.Add(dragedObj);
// 将被拖动的节点移除
treeView.ExpandAll();
}
}
}
}