我用以下代码实现TreeView的拖动问题
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace TreeViewTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Point Position = new Point(0, 0);
private void Form1_Load(object sender, EventArgs e)
{
this.tvwTest.ExpandAll();
} private void tvwTest_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
} private void tvwTest_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None; }
private void tvwTest_DragDrop(object sender, DragEventArgs e)
{
TreeNode myNode = null;
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
}
else
{
MessageBox.Show("error");
}
Position.X = e.X;
Position.Y = e.Y;
Position = tvwTest.PointToClient(Position);
TreeNode DropNode = this.tvwTest.GetNodeAt(Position);
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
{
TreeNode DragNode = myNode;
// 将被拖拽节点从原来位置删除。
myNode.Remove();
// 在目标节点下增加被拖拽节点
DropNode.Nodes.Add(DragNode);
}
// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if (DropNode == null)
{
TreeNode DragNode = myNode;
myNode.Remove();
tvwTest.Nodes.Add(DragNode);
} }
}
}
上述代码实现将一个节点拖拽到别的节点下做为子节点,
但我想实现在上述功能的基础上,实现将两个子节点或两个根节点通过拖拽调换位置,
node1
node2
拖拽后
node2
node1
是平级的关系
谢谢
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace TreeViewTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Point Position = new Point(0, 0);
private void Form1_Load(object sender, EventArgs e)
{
this.tvwTest.ExpandAll();
} private void tvwTest_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
} private void tvwTest_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None; }
private void tvwTest_DragDrop(object sender, DragEventArgs e)
{
TreeNode myNode = null;
if (e.Data.GetDataPresent(typeof(TreeNode)))
{
myNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
}
else
{
MessageBox.Show("error");
}
Position.X = e.X;
Position.Y = e.Y;
Position = tvwTest.PointToClient(Position);
TreeNode DropNode = this.tvwTest.GetNodeAt(Position);
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
{
TreeNode DragNode = myNode;
// 将被拖拽节点从原来位置删除。
myNode.Remove();
// 在目标节点下增加被拖拽节点
DropNode.Nodes.Add(DragNode);
}
// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if (DropNode == null)
{
TreeNode DragNode = myNode;
myNode.Remove();
tvwTest.Nodes.Add(DragNode);
} }
}
}
上述代码实现将一个节点拖拽到别的节点下做为子节点,
但我想实现在上述功能的基础上,实现将两个子节点或两个根节点通过拖拽调换位置,
node1
node2
拖拽后
node2
node1
是平级的关系
谢谢
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货