究竟要设置什么属性才能拖动节点?
拖动过程中有哪些事件会激发。
需要用到哪些事件?谢谢,谢谢。
有源码更好。

解决方案 »

  1.   

    /// <summary>
    /// 移动节点
    /// </summary>
    /// <param name="Index">目的index</param>
    private void MoveNode(int Index)
    {   
    TreeNode MoveNode=tvMain.SelectedNode;          //要移动的节点 if(tvMain.SelectedNode.FullPath==tvMain.SelectedNode.Text) //选的是根节点
    {
    tvMain.SelectedNode.Remove();
    tvMain.Nodes.Insert(Index,MoveNode);
    }
    else          
    {
              TreeNode ParentNode=MoveNode.Parent;           //父节点

     tvMain.SelectedNode.Remove();
     ParentNode.Nodes.Insert(Index,MoveNode);
    } tvMain.SelectedNode=MoveNode;
    }//上移节点
    int iIndex=tvMain.SelectedNode.Index-1;
    MoveNode(iIndex);
    //下移节点
    int iIndex=tvMain.SelectedNode.Index+1;
    MoveNode(iIndex);
      

  2.   

    是拖动文件到treeview,然后显示文件的路径吗!!!
      

  3.   

    我在msdn上找到了。给大家贴出来:
    using System;
    using System.Drawing;
    using System.Windows.Forms;public class Form1 : Form
    {
        private TreeView treeView1;    public Form1()
        {
            treeView1 = new TreeView();        this.SuspendLayout();        // Initialize treeView1.
            treeView1.AllowDrop = true;
            treeView1.Dock = DockStyle.Fill;        // Add nodes to treeView1.
            TreeNode node;
            for (int x = 0; x < 3; ++x)
            {
                // Add a root node to treeView1.
                node = treeView1.Nodes.Add(String.Format("Node{0}", x*4));
                for (int y = 1; y < 4; ++y)
                {
                    // Add a child node to the previously added node.
                    node = node.Nodes.Add(String.Format("Node{0}", x*4 + y));
                }
            }        // Add event handlers for the required drag events.
            treeView1.ItemDrag += new ItemDragEventHandler(treeView1_ItemDrag);
            treeView1.DragEnter += new DragEventHandler(treeView1_DragEnter);
            treeView1.DragOver += new DragEventHandler(treeView1_DragOver);
            treeView1.DragDrop += new DragEventHandler(treeView1_DragDrop);        // Initialize the form.
            this.ClientSize = new Size(292, 273);
            this.Controls.Add(treeView1);        this.ResumeLayout(false);
        }    [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }    private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
        {
            // Move the dragged node when the left mouse button is used.
            if (e.Button == MouseButtons.Left)
            {
                DoDragDrop(e.Item, DragDropEffects.Move);
            }        // Copy the dragged node when the right mouse button is used.
            else if (e.Button == MouseButtons.Right)
            {
                DoDragDrop(e.Item, DragDropEffects.Copy);
            }
        }    // Set the target drop effect to the effect 
        // specified in the ItemDrag event handler.
        private void treeView1_DragEnter(object sender, DragEventArgs e)
        {
            e.Effect = e.AllowedEffect;
        }    // Select the node under the mouse pointer to indicate the 
        // expected drop location.
        private void treeView1_DragOver(object sender, DragEventArgs e)
        {
            // Retrieve the client coordinates of the mouse position.
            Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));        // Select the node at the mouse position.
            treeView1.SelectedNode = treeView1.GetNodeAt(targetPoint);
        }    private void treeView1_DragDrop(object sender, DragEventArgs e)
        {
            // Retrieve the client coordinates of the drop location.
            Point targetPoint = treeView1.PointToClient(new Point(e.X, e.Y));        // Retrieve the node at the drop location.
            TreeNode targetNode = treeView1.GetNodeAt(targetPoint);        // Retrieve the node that was dragged.
            TreeNode draggedNode = (TreeNode)e.Data.GetData(typeof(TreeNode));        // Confirm that the node at the drop location is not 
            // the dragged node or a descendant of the dragged node.
            if (!draggedNode.Equals(targetNode) && !ContainsNode(draggedNode, targetNode))
            {
                // If it is a move operation, remove the node from its current 
                // location and add it to the node at the drop location.
                if (e.Effect == DragDropEffects.Move)
                {
                    draggedNode.Remove();
                    targetNode.Nodes.Add(draggedNode);
                }            // If it is a copy operation, clone the dragged node 
                // and add it to the node at the drop location.
                else if (e.Effect == DragDropEffects.Copy)
                {
                    targetNode.Nodes.Add((TreeNode)draggedNode.Clone());
                }            // Expand the node at the location 
                // to show the dropped node.
                targetNode.Expand();
            }
        }    // Determine whether one node is a parent 
        // or ancestor of a second node.
        private bool ContainsNode(TreeNode node1, TreeNode node2)
        {
            // Check the parent node of the second node.
            if (node2.Parent == null) return false;
            if (node2.Parent.Equals(node1)) return true;        // If the parent node is not null or equal to the first node, 
            // call the ContainsNode method recursively using the parent of 
            // the second node.
            return ContainsNode(node1, node2.Parent);
        }}
    谢谢大家了,散分吧!