Пример #1
0
        /// <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;
                }
            }
        }