//当用户开始拖动节点时发生
private void tvQueuing_ItemDrag(object sender, ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}
private Point Position = new Point(0, 0);
//在将对象拖入控件的边界时发生
private void tvQueuing_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(TreeNode)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
}
//在完成拖放操作时发生
private void tvQueuing_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 = this.tvQueuing.PointToClient(Position);
TreeNode DropNode = this.tvQueuing.GetNodeAt(Position);//目标节点
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
if (DropNode != null && DropNode.Parent != myNode && DropNode != myNode)
{
TreeNode DragNode = myNode;
// 将被拖拽节点从原来位置删除。
myNode.Remove();
// 比如56移动到72下面
int dest = DropNode.Index;//72的缩影
int d = dest + 1;
tvQueuing.Nodes.Insert(d,DragNode);
// tvQueuing.Nodes.Add(myNode);//选中节点加到最后一个位置
// DropNode.Nodes.Add(DragNode);//选中节点加到目标节点区了
}
// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if (DropNode == null)
{
TreeNode DragNode = myNode;
myNode.Remove();
tvQueuing.Nodes.Add(DragNode);
}
}
tree拖拽效果
最新推荐文章于 2023-07-05 15:37:16 发布