As follows:private void treeView2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode newNode;
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt;
TreeNode destinationNode;
pt = treeView2.PointToClient(new Point(e.X, e.Y));
destinationNode = treeView2.GetNodeAt(pt);
newNode = (TreeNode) e.Data.GetData("System.Windows.Forms.TreeNode");
if(destinationNode==null)
{
destinationNode=(TreeNode)newNode.Clone();
treeView2.Nodes.Add(destinationNode);
destinationNode.Expand();
//Remove original node
newNode.Remove(); }
else if(!destinationNode.Equals(newNode))
{
//destinationNode.Nodes.Add(newNode.Clone());
destinationNode.Nodes.Add((TreeNode) newNode.Clone());
destinationNode.Expand();
//Remove original node
newNode.Remove();
} }
}private void treeView2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}private void treeView2_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode newNode;
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt;
TreeNode destinationNode;
pt = treeView1.PointToClient(new Point(e.X, e.Y));
destinationNode = treeView1.GetNodeAt(pt);
newNode = (TreeNode) e.Data.GetData("System.Windows.Forms.TreeNode"); if(destinationNode==null)
{
destinationNode=(TreeNode)newNode.Clone();
treeView1.Nodes.Add(destinationNode);
destinationNode.Expand();
//Remove original node
newNode.Remove(); }
else if(!destinationNode.Equals(newNode))
{
//destinationNode.Nodes.Add(newNode.Clone());
destinationNode.Nodes.Add((TreeNode) newNode.Clone());
destinationNode.Expand();
//Remove original node
newNode.Remove();
}
}
}private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}/// <summary>
/// How do I make the TreeView scroll when I drag an item to the top or bottom?
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeView tv = sender as TreeView;
Point pt = tv.PointToClient(new Point(e.X,e.Y));
int delta = tv.Height - pt.Y;
if ((delta < tv.Height / 2) && (delta > 0))
{
TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
if (tn.NextVisibleNode != null)
tn.NextVisibleNode.EnsureVisible();
}
if ((delta > tv.Height / 2) && (delta < tv.Height))
{
TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
if (tn.PrevVisibleNode != null)
tn.PrevVisibleNode.EnsureVisible();
}
}/// <summary>
/// Show node's tip
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeNode tn = treeView2.GetNodeAt(e.X, e.Y);
if(tn != null)
{
int currentNodeIndex = tn.Index; if(currentNodeIndex != oldNodeIndex)
{
oldNodeIndex = currentNodeIndex;
if(this.toolTip1 != null && this.toolTip1.Active)
this.toolTip1.Active = false; //turn it off
this.toolTip1.SetToolTip(treeView2, string.Format("tooltip: node {0}", oldNodeIndex));
this.toolTip1.Active = true; //make it active so it can show
}
}
}
{
TreeNode newNode;
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt;
TreeNode destinationNode;
pt = treeView2.PointToClient(new Point(e.X, e.Y));
destinationNode = treeView2.GetNodeAt(pt);
newNode = (TreeNode) e.Data.GetData("System.Windows.Forms.TreeNode");
if(destinationNode==null)
{
destinationNode=(TreeNode)newNode.Clone();
treeView2.Nodes.Add(destinationNode);
destinationNode.Expand();
//Remove original node
newNode.Remove(); }
else if(!destinationNode.Equals(newNode))
{
//destinationNode.Nodes.Add(newNode.Clone());
destinationNode.Nodes.Add((TreeNode) newNode.Clone());
destinationNode.Expand();
//Remove original node
newNode.Remove();
} }
}private void treeView2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}private void treeView2_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeNode newNode;
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
Point pt;
TreeNode destinationNode;
pt = treeView1.PointToClient(new Point(e.X, e.Y));
destinationNode = treeView1.GetNodeAt(pt);
newNode = (TreeNode) e.Data.GetData("System.Windows.Forms.TreeNode"); if(destinationNode==null)
{
destinationNode=(TreeNode)newNode.Clone();
treeView1.Nodes.Add(destinationNode);
destinationNode.Expand();
//Remove original node
newNode.Remove(); }
else if(!destinationNode.Equals(newNode))
{
//destinationNode.Nodes.Add(newNode.Clone());
destinationNode.Nodes.Add((TreeNode) newNode.Clone());
destinationNode.Expand();
//Remove original node
newNode.Remove();
}
}
}private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
DoDragDrop(e.Item, DragDropEffects.Move);
}/// <summary>
/// How do I make the TreeView scroll when I drag an item to the top or bottom?
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
TreeView tv = sender as TreeView;
Point pt = tv.PointToClient(new Point(e.X,e.Y));
int delta = tv.Height - pt.Y;
if ((delta < tv.Height / 2) && (delta > 0))
{
TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
if (tn.NextVisibleNode != null)
tn.NextVisibleNode.EnsureVisible();
}
if ((delta > tv.Height / 2) && (delta < tv.Height))
{
TreeNode tn = tv.GetNodeAt(pt.X, pt.Y);
if (tn.PrevVisibleNode != null)
tn.PrevVisibleNode.EnsureVisible();
}
}/// <summary>
/// Show node's tip
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView2_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
TreeNode tn = treeView2.GetNodeAt(e.X, e.Y);
if(tn != null)
{
int currentNodeIndex = tn.Index; if(currentNodeIndex != oldNodeIndex)
{
oldNodeIndex = currentNodeIndex;
if(this.toolTip1 != null && this.toolTip1.Active)
this.toolTip1.Active = false; //turn it off
this.toolTip1.SetToolTip(treeView2, string.Format("tooltip: node {0}", oldNodeIndex));
this.toolTip1.Active = true; //make it active so it can show
}
}
}
http://www.syncfusion.com/FAQ/WinForms/FAQ_c91c.asp#q617q
http://www.syncfusion.com/Faq/winforms/Files/treednd.zip
滑动到节点可以通过GetNodeAt得到。