Esempio n. 1
0
        /// <summary>Verifies that the dragged object is valid for dropping.
        /// Occurs while the user is dragging an object over the <see cref="TreeView"/>.
        /// May occur multiple times during a single drag.</summary>
        void OnTreeDragOver(object sender, DragEventArgs e)
        {
            OnTreeDragEnter(sender, e);
            if (e.Effect == DragDropEffects.None)
            {
                return;
            }

            TreeNode draggedNode = GetDraggedTreeNode(e);
            Node     dragged     = Node.GetNode(draggedNode);

            TreeNode targetNode = GetTargetNode(e);

            if (targetNode == draggedNode)
            {
                e.Effect = DragDropEffects.None;
                return;
            }

            Node target = Node.GetNode(targetNode);

            if (dragged != target && target.AllowDrop && target.Accepts(dragged))
            {// NOT same AND allows drops AND accepts the object
                e.Effect = e.AllowedEffect;
                if (previousTarget != null && previousTarget != targetNode)
                {// target changed -> UN-highlight previous target
                    Highlight(previousTarget, false);
                }
                previousTarget = targetNode;
                Highlight(targetNode);
            }
            else
            {
                e.Effect = DragDropEffects.None;
            }
        }