CardMaker.Forms.MDIProject.treeView_DragDrop C# (CSharp) Метод

treeView_DragDrop() приватный Метод

private treeView_DragDrop ( object sender, DragEventArgs e ) : void
sender object
e System.Windows.Forms.DragEventArgs
Результат void
        private void treeView_DragDrop(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(TreeNode)))
            {
                Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                var tnTarget = ((TreeView)sender).GetNodeAt(pt);
                var tnDrag = (TreeNode)e.Data.GetData(typeof(TreeNode));

                if (null != tnTarget?.Tag &&
                    tnDrag != tnTarget &&
                    tnTarget.Tag is ProjectLayout &&
                    tnTarget.TreeView == tnDrag.TreeView)
                {
                    int nDragIdx = tnDrag.Index;
                    int nTargetIdx = tnTarget.Index;
                    tnTarget.Parent.Nodes.RemoveAt(nDragIdx);
                    tnTarget.Parent.Nodes.Insert(nTargetIdx, tnDrag);
                    var zProject = tnTarget.Parent.Tag as Project;
                    if (null != zProject)
                    {
                        var listLayouts = zProject.Layout.ToList();
                        listLayouts.RemoveAt(nDragIdx);
                        listLayouts.Insert(nTargetIdx, (ProjectLayout) tnDrag.Tag);
                        zProject.Layout = listLayouts.ToArray();
                    }
                    ProjectManager.Instance.FireProjectUpdated(true);
                }
            }
        }