下面是一个比较简单的实现代码,比codeproject上实现的功能简单一些,不知道是否满足你的需要? using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void treeView1_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false)) { //获取当前鼠标位置所在的树节点,即目标节点 Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y)); TreeNode toNode = ((TreeView)sender).GetNodeAt(pt); //获取被拖动的节点 TreeNode fromNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
2.MouseUp事件获得节点2;(回收站)如果节点2的显示文本等于回收站,删除节点1;细节问题自己考虑考虑,由于时间有限,只能指导到这里了;
你也可以用拖放事件
http://www.codeproject.com/KB/tree/TreeViewDragDrop.aspx
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void treeView1_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
{
//获取当前鼠标位置所在的树节点,即目标节点
Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
TreeNode toNode = ((TreeView)sender).GetNodeAt(pt); //获取被拖动的节点
TreeNode fromNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
//完成拖动节点的移动
fromNode.Remove();
toNode.Nodes.Add(fromNode);
toNode.Expand();
}
} private void treeView1_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
} private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
{
//按下鼠标左键,启动拖放
if (e.Button == MouseButtons.Left)
DoDragDrop(e.Item, DragDropEffects.Move);
} private void treeView1_DragOver(object sender, DragEventArgs e)
{
//设置鼠标经过的树节点为当前节点
Point targetPoint = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
((TreeView)(sender)).SelectedNode = ((TreeView)(sender)).GetNodeAt(targetPoint);
} }
}