/// <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; } }