/// <summary> /// Drag and drop node /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UserFactoryDetails_tv_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(typeof(TreeNode))) { TreeNode sourceNode = (TreeNode)e.Data.GetData(typeof(TreeNode)); Point point = UserFactoryDetails_tv.PointToClient(new Point(e.X, e.Y)); TreeNode targetNode = UserFactoryDetails_tv.GetNodeAt(point.X, point.Y); if (IsTreeNodeMovable(sourceNode, targetNode)) { sourceNode.Parent.ToolTipText = "Changed"; TreeNode dragNode = sourceNode; UserFactoryDetails_tv.Nodes.Remove(sourceNode); if (targetNode.Parent == null) { targetNode.Nodes.Insert(0, dragNode); } else { targetNode.Parent.Nodes.Insert(targetNode.Index + 1, dragNode); } } } }
/// <summary> /// Enables node dragable /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UserFactoryDetails_tv_DragOver(object sender, DragEventArgs e) { TreeNode targetNode = null; TreeNode sourceNode = null; if (e.Data.GetDataPresent(typeof(TreeNode))) { Point point = UserFactoryDetails_tv.PointToClient(new Point(e.X, e.Y)); targetNode = UserFactoryDetails_tv.GetNodeAt(point.X, point.Y); sourceNode = e.Data.GetData(typeof(TreeNode)) as TreeNode; int delta = UserFactoryDetails_tv.Height - point.Y; if ((delta < UserFactoryDetails_tv.Height / 2) && (delta > 0)) { TreeNode tn = UserFactoryDetails_tv.GetNodeAt(point.X, point.Y); tn.NextVisibleNode?.EnsureVisible(); } if ((delta > UserFactoryDetails_tv.Height / 2) && (delta < UserFactoryDetails_tv.Height)) { TreeNode tn = UserFactoryDetails_tv.GetNodeAt(point.X, point.Y); tn.PrevVisibleNode?.EnsureVisible(); } } if (targetNode != null) { targetNode.Expand(); if (IsTreeNodeMovable(sourceNode, targetNode)) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; } } else { e.Effect = DragDropEffects.None; } }
/// <summary> /// drags factory nodes /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void UserFactoryDetails_tv_ItemDrag(object sender, ItemDragEventArgs e) { UserFactoryDetails_tv.DoDragDrop((TreeNode)e.Item, DragDropEffects.All); }