/// <summary>
///树节点拖动后事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvOrgnization_DragDrop(object sender, DragEventArgs e)
{
// 验证所选控件是否为TreeNode
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) == false)
{
return;
}
// 获取所在TreeView
TreeView selectedTreeView = (TreeView)sender;
//获取要拖动的节点
TreeNode dropNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
//获取选中节点
TreeNode targetNode= selectedTreeView.SelectedNode;
if (targetNode == dropNode)
{
return;
}
//从所在位置移除所要拖动的节点
dropNode.Remove();
//将拖动节点移到指定位置
if( targetNode ==null)
{
selectedTreeView.Nodes.Add(dropNode);
}
else
{
targetNode.Nodes.Add(dropNode);
}
//确保节点可视
dropNode.EnsureVisible();
selectedTreeView.SelectedNode = dropNode;
}
/// <summary>
///拖入控件边界时事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvOrgnization_DragEnter(object sender, DragEventArgs e)
{
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) )
{
//将拖动源数据放到拖动目标
e.Effect = DragDropEffects.Move;
}
else
{
// 放置目标不接受该数据
e.Effect = DragDropEffects.None;
}
}
/// <summary>
///开始拖动事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvOrgnization_ItemDrag(object sender, ItemDragEventArgs e)
{
tvOrgnization.DoDragDrop(e.Item, DragDropEffects.Move);
}
/// <summary>
///拖出控件边界时事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tvOrgnization_DragOver(object sender, DragEventArgs e)
{
if( e.Data.GetDataPresent("System.Windows.Forms.TreeNode",true) == false)
{
return;
}
// 获取treeview
TreeView selectedTreeView = (TreeView)sender;
//将屏幕位置装换为工区位置
Point pt = selectedTreeView.PointToClient(new Point(e.X, e.Y));
TreeNode targetNode = selectedTreeView.GetNodeAt(pt);
//验证targetNode是否为当前选中节点
if (selectedTreeView.SelectedNode != targetNode )
{
//不是则将当前选中节点设为targerNode
selectedTreeView.SelectedNode = targetNode;
//若目标节点为拖动节点时,不显示拖放效果
TreeNode dropNode =(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
while (targetNode != null)
{
if (targetNode == dropNode)
{
e.Effect = DragDropEffects.None;
}
targetNode = targetNode.Parent;
}
e.Effect = DragDropEffects.Move;
}
}