给你点原码希望对你有帮助!
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace DragTreeItem
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TreeView treeView1;
private System.Windows.Forms.ImageList imageList1;
private System.ComponentModel.IContainer components;
private System.Windows.Forms.TreeNode oldNode;
private System.Drawing.Color oldNodeForeColor;
        private System.Drawing.Color oldNodeBackColor;
public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
            oldNode = null;
//
// TODO: Add any constructor code after InitializeComponent call
//
} /// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null) 
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
this.treeView1 = new System.Windows.Forms.TreeView();
this.imageList1 = new System.Windows.Forms.ImageList(this.components);
this.SuspendLayout();
// 
// treeView1
// 
this.treeView1.AllowDrop = true;
this.treeView1.Dock = System.Windows.Forms.DockStyle.Fill;
this.treeView1.ImageList = this.imageList1;
this.treeView1.Name = "treeView1";
this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
  new System.Windows.Forms.TreeNode("Node0", 0, 0, new System.Windows.Forms.TreeNode[] {
   new System.Windows.Forms.TreeNode("Node1", 2, 2)}),
  new System.Windows.Forms.TreeNode("Node0", new System.Windows.Forms.TreeNode[] {
 new System.Windows.Forms.TreeNode("Node3", 2, 2)}),
  new System.Windows.Forms.TreeNode("Node1"),
  new System.Windows.Forms.TreeNode("Node2", new System.Windows.Forms.TreeNode[] {
 new System.Windows.Forms.TreeNode("Node4", 0, 1, new System.Windows.Forms.TreeNode[] {
  new System.Windows.Forms.TreeNode("Node5", 2, 2)})}),
  new System.Windows.Forms.TreeNode("Node6"),
  new System.Windows.Forms.TreeNode("Node7", new System.Windows.Forms.TreeNode[] {
 new System.Windows.Forms.TreeNode("Node8", new System.Windows.Forms.TreeNode[] {
new System.Windows.Forms.TreeNode("Node9", new System.Windows.Forms.TreeNode[] {
   new System.Windows.Forms.TreeNode("Node11")}),
new System.Windows.Forms.TreeNode("Node10")})})});
this.treeView1.Size = new System.Drawing.Size(292, 266);
this.treeView1.TabIndex = 0;
this.treeView1.AfterExpand += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterExpand);
this.treeView1.AfterCollapse += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterCollapse);
this.treeView1.DragOver += new System.Windows.Forms.DragEventHandler(this.treeView1_DragOver);
this.treeView1.DragEnter += new System.Windows.Forms.DragEventHandler(this.treeView1_DragEnter);
this.treeView1.ItemDrag += new System.Windows.Forms.ItemDragEventHandler(this.treeView1_ItemDrag);
this.treeView1.DragDrop += new System.Windows.Forms.DragEventHandler(this.treeView1_DragDrop);
// 
// imageList1
// 
this.imageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit;
this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
// 
// Form1
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
  this.treeView1});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false); }
#endregion /// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() 
{
Application.Run(new Form1());
}

解决方案 »

  1.   

    private void treeView1_AfterCollapse(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
    e.Node.ImageIndex=0;
    e.Node.SelectedImageIndex=0;

    } private void treeView1_AfterExpand(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
    e.Node.ImageIndex= 1;
    e.Node.SelectedImageIndex=1;

    } private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
    {
    DoDragDrop(e.Item, DragDropEffects.Move);
    } private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    object data = e.Data.GetData(typeof(TreeNode));
    if(data!=null)
    {
    TreeNode dragNode = (TreeNode)data;
    if(dragNode.TreeView.Equals(treeView1))
    {
    e.Effect=DragDropEffects.Move;
    }
    else
    {
    e.Effect= DragDropEffects.None;
    }
    }
    else
    {
    e.Effect= DragDropEffects.None;
    }
    }
    private TreeNode FindNode(int x, int y)
    {
    Point p = treeView1.PointToClient(new Point(x,y));
    TreeNode topNode =treeView1.TopNode;
    while(topNode != null)
    {
    if(topNode.Bounds.Contains(p))
    {
    return topNode;
    }
    topNode = topNode.NextVisibleNode;
    }
    return null;
    } private void treeView1_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if(e.Effect == DragDropEffects.Move)
    {
    TreeNode overNode = FindNode(e.X, e.Y);
    if(overNode !=null && !overNode.Equals(oldNode))
    {
    if(oldNode!=null)
    {
    oldNode.BackColor = oldNodeBackColor;
    oldNode.ForeColor = oldNodeForeColor;
    }
    oldNode = overNode;
    oldNodeBackColor = overNode.BackColor;
    oldNodeForeColor = overNode.ForeColor;
    TreeNode moveNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
    if(overNode.Equals(moveNode))
    {
    overNode.BackColor = Color.Red;
    overNode.ForeColor = Color.White;
    }
    else
    {
    overNode.BackColor = Color.Green;
    overNode.ForeColor = Color.White;
    }
    }
    }
    } private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    oldNode.BackColor = oldNodeBackColor;
    oldNode.ForeColor = oldNodeForeColor;
    oldNode = null;
    if(e.Effect == DragDropEffects.Move)
    {
    TreeNode overNode = FindNode(e.X, e.Y);
    TreeNode moveNode = (TreeNode)(e.Data.GetData(typeof(TreeNode)));
    if(overNode == moveNode)
    {
    MessageBox.Show(" i con`t move Node", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    return ;
    }
    if(overNode == null)
    {
    if(moveNode.Parent != null)
    {
    if(moveNode.Parent.Nodes.Count ==1)
    {
    moveNode.Parent.ImageIndex = 2;
    moveNode.Parent.SelectedImageIndex = 2;
    }
    moveNode.Remove();
    treeView1.Nodes.Add(moveNode);
    }
    }
    else if(overNode.Parent == moveNode.Parent)
    {
    if(overNode.Nodes.Count !=0)
    {
    if(moveNode.Parent !=null)
    {
    if(moveNode.Nodes.Count == 1)
    {
    moveNode.Parent .ImageIndex = 2;
    moveNode.Parent.SelectedImageIndex = 2;
    }
    }
    moveNode.Remove();
    overNode.Nodes.Add(moveNode);
    overNode.Expand();
    overNode.ImageIndex =1;
    }
    }
    else if(overNode.Nodes.Count == 0)
    {
    if(moveNode.Parent != null)
    {
    if(moveNode.Parent.Nodes.Count == 1)
    {
    moveNode.Parent.ImageIndex = 2;
    moveNode.Parent.SelectedImageIndex = 2;
    }
    }
    moveNode.Remove();
    if(overNode.Parent != null)
    {
    overNode.Parent.Nodes.Add(moveNode);
    }
    else
    {
    treeView1.Nodes.Add(moveNode);
    }
    }
    else if(moveNode.Parent ==null || !moveNode.Parent.Equals(overNode))
    {
    if(moveNode.Parent != null)
    {
    if(moveNode.Parent.Nodes.Count == 1)
    {
    moveNode.Parent.ImageIndex = 2;
    moveNode.Parent.SelectedImageIndex = 2;
    }
    }
    moveNode.Remove();
    overNode.Nodes.Add(moveNode);
    overNode.Expand();
    overNode.ImageIndex = 1;
    } } } }
    }
      

  2.   

    这个是在TREEVIEW中的源码。我想你要的listView中的你换一下就差不多了。
    当然listView中没有什么NODE之类的。
    不过大同小异罢了:)treeView和listView都包括itemDrag事件的。
    呵呵!希望对你有帮助!!!!!!!!!!!
    还有我申明一下我可不是高手。说白了也是只菜鸟罢了:(
    还得断续努力学习!!!!!!!!!