在DragOver事件中加入
TreeNode node = this.GetNodeAt(this.PointToClient(Control.MousePosition));
if (node.NextVisibleNode != null)
node.NextVisibleNode.EnsureVisible();
if (node.PrevVisibleNode != null)
node.PrevVisibleNode.EnsureVisible();
TreeNode node = this.GetNodeAt(this.PointToClient(Control.MousePosition));
if (node.NextVisibleNode != null)
node.NextVisibleNode.EnsureVisible();
if (node.PrevVisibleNode != null)
node.PrevVisibleNode.EnsureVisible();
{
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();
}
}
}
还是不行,代码如上,无法执行拖动,诸位大侠帮我看看怎么回事