/// <summary> /// 在将对象拖到控件的边界上发生。 /// </summary> private void treeView_DragOver(object sender, DragEventArgs e) { // 计算拖动的位置并移动图片 Point point = this.tempTreeView.PointToClient(new Point(e.X, e.Y)); DragHelper.ImageList_DragMove(point.X - this.tempTreeView.Left, point.Y - this.tempTreeView.Top); // 取得实际拖拽到目标节点 TreeNode nodeAt = this.tempTreeView.GetNodeAt(this.tempTreeView.PointToClient(new Point(e.X, e.Y))); if (nodeAt == null) { e.Effect = DragDropEffects.None; } else { e.Effect = DragDropEffects.Move; if (this.tempDropNode != nodeAt) { DragHelper.ImageList_DragShowNolock(false); this.tempTreeView.SelectedNode = nodeAt; DragHelper.ImageList_DragShowNolock(true); this.tempDropNode = nodeAt; } TreeNode treeNode = nodeAt; while (treeNode.Parent != null) { if (treeNode.Parent == this.dragNode) { e.Effect = DragDropEffects.None; } treeNode = treeNode.Parent; } } }