您的位置:首页 > 其它

实现在TreeView节点中进行拖放操作

2009-10-11 11:47 627 查看
private TreeNode oldenterNode;
private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
//启动拖放操作, 设置拖放类型为MOVE移动
DoDragDrop(e.Item, DragDropEffects.Move);
}

//保存前一个鼠标进入的TreeNode
private void treeView1_DragEnter(object sender, DragEventArgs e)
{
//获取TreeNode类型的数据内容.
object data = e.Data.GetData(typeof(TreeNode));
//如果有数据拖放时不允许旋转
if (data != null)
{
e.Effect = DragDropEffects.Move;
}
else
{
e.Effect = DragDropEffects.None;
}
//获得当前TreeView的引用
TreeView theTree = (TreeView)sender;
//得到鼠标进入TreeNode的引用
TreeNode enterNode = theTree.GetNodeAt(treeView1.PointToClient(new Point (e.X, e.Y)));

if (enterNode != null)
{
//改变进入TreeNode的背景色
enterNode.BackColor = Color.Blue;
//保存此TreeNode,进入下一个时还原背景色
oldenterNode = enterNode;
}
}

private void treeView1_DragOver(object sender, DragEventArgs e)
{
//修改鼠标进入TreeNode的背景色,还原上一个TreeNode背景色
TreeView theTree = (TreeView)sender;
TreeNode enterNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if ((enterNode != null) && (enterNode != oldenterNode))
{
oldenterNode.BackColor = Color.White;
enterNode.BackColor = Color.Blue;
oldenterNode = enterNode;
}
}

private void treeView1_DragDrop(object sender, DragEventArgs e)
{
//得到拖放数据,并转换为TreeNode型
TreeNode theNode = (TreeNode)e.Data.GetData(typeof(TreeNode));
TreeView theTree = (TreeView)sender;

//得到鼠标进入TreeNode,而拖放目标TreeNode
TreeNode targetNode = theTree.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));

if (targetNode != null)
{
TreeNode targetParent = targetNode.Parent;
//删除拖放的TreeNode
theNode.Remove();
//添加到目标TreeView下
targetNode.Nodes.Add(theNode);
targetNode.BackColor = Color.White;
theTree.SelectedNode = targetNode;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐