在DragOver事件中加入
TreeNode node = this.GetNodeAt(this.PointToClient(Control.MousePosition));
if (node.NextVisibleNode != null)
node.NextVisibleNode.EnsureVisible();
if (node.PrevVisibleNode != null)
node.PrevVisibleNode.EnsureVisible();

解决方案 »

  1.   

    private void TreeViewDrag_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
    {
             if(e.Button==MouseButtons.Left)
             {
                     DoDragDrop(e.Item,DragDropEffects.Move);
             }
    }private void TreeViewDrag_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    e.Effect=DragDropEffects.Move;
    }
    private void TreeViewDrag_DragOver(object sender,System.Windows.Forms.DragEventArgs e)
    {
    Point pt=this.PointToClient(new Point(e.X,e.Y));
    TreeNode curDragNode=this.GetNodeAt(pt);
    if(curDragNode.Nodes.Count!=0)
    {
    this.SelectedNode=curDragNode;
    e.Effect=DragDropEffects.Move;
    }
    else
    {
    e.Effect=DragDropEffects.Scroll;
    }
    }
    private void TreeViewDrag_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    TreeNode newNode;
    if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
    {
    Point pt=this.PointToClient(new Point(e.X,e.Y));
    TreeNode lastNode=this.GetNodeAt(pt);
    newNode = (TreeNode) e.Data.GetData     ("System.Windows.Forms.TreeNode");
    if(lastNode.NextVisibleNode!=null)
             lastNode.NextVisibleNode.EnsureVisible();
    if(lastNode.PrevVisibleNode!=null)
             lastNode.PrevVisibleNode.EnsureVisible();
    if(!this.SelectedNode.Equals(newNode))
    {
    TreeNode node=(TreeNode)newNode.Clone();
    this.SelectedNode.Nodes.Add(node);

    this.SelectedNode.Expand();
    node.Remove();
    }

    }
    }
    还是不行,代码如上,无法执行拖动,诸位大侠帮我看看怎么回事
      

  2.   

    不能加到DragDrop事件中,要加到DragOver事件中