Treeview   树 ,  随意拖动树的节点, 拖到那个节点下面,就挂在哪个节点下面。
谢谢。。  给思路或源码都行。

解决方案 »

  1.   

    可以按照TreeView控件的思路去构建,把每个节点都看作一个对象,而不是填充。
      

  2.   

    看看这个能帮你不
    http://blog.csdn.net/zgke/archive/2009/01/13/3768131.aspx
      

  3.   


    不明白LZ "不用控件构建Treeview 数的 问题" 什么意思.
    随意拖动树的节点:
    TreeNode selectnode = null;
            private void treeView1_MouseDown(object sender, MouseEventArgs e)
            {
                selectnode = this.treeView1.HitTest(e.Location).Node;
            }        bool ismoveTreenode = false;
            private void treeView1_MouseMove(object sender, MouseEventArgs e)
            {
                if (selectnode == null)
                {
                    ismoveTreenode = false;
                    return;
                }
                TreeNode td = this.treeView1.HitTest(e.Location).Node;
                if (td != null)
                {
                    this.treeView1.SelectedNode = td;
                    ismoveTreenode = true;
                    td.Expand();
                }
            }        private void treeView1_MouseUp(object sender, MouseEventArgs e)
            {
                if (selectnode != null && ismoveTreenode)
                {
                    TreeNode td = this.treeView1.HitTest(e.Location).Node;
                    if (td != null)
                    {
                        if (td == selectnode || selectnode.Parent == td)
                        {
                            selectnode = null;
                            ismoveTreenode = false;
                            return;
                        }
                        if (selectnode.Parent != null)
                            selectnode.Parent.Nodes.Remove(selectnode);
                        else
                            this.treeView1.Nodes.Remove(selectnode);
                        td.Nodes.Add(selectnode);
                        selectnode = null;
                        ismoveTreenode = false;
                        selectnode = null;
                    }
                    else
                    {
                        selectnode = null;
                    }
                }
                else
                    selectnode = null;
            }
      

  4.   

    http://www.cnblogs.com/wf5360308/articles/1234515.html
      

  5.   


     public Form1()
            {
                InitializeComponent(); 
                treeView1.AllowDrop = true;
            }
           
            private void treeView1_ItemDrag(object sender, ItemDragEventArgs e)
            {
                treeView1.DoDragDrop(e.Item, DragDropEffects.Move);
            }        private void treeView1_DragEnter(object sender, DragEventArgs e)
            {
                if (e.Data.GetDataPresent(typeof(TreeNode)))
                {
                    e.Effect = e.AllowedEffect;
                }
            }        private void treeView1_DragDrop(object sender, DragEventArgs e)
            {
                TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
                TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));            if (fromNode != null && toNode != null)
                {
                    treeView1.Nodes.Remove(fromNode);
                    toNode.Nodes.Add(fromNode);                treeView1.ExpandAll();
                }
            }
      

  6.   

    我的意思 就是 不拖控件 ,      TreeNode node  = new TreeNode ();
     再用  node.    那些属性  或方法 
    我 主要是不了解那个节点如何拖动,      如:  北京市
         东城区
     长沙
         天心
    我要把那天心 拖动到    北京市下面
    北京市
         东城区
         天心
    长沙
         
         
      

  7.   

    dragdrop事件处理函数中有个bug,现改为如下,没详细测试,仅供参考: private void treeView1_DragDrop(object sender, DragEventArgs e)
            {
                TreeNode fromNode = e.Data.GetData(typeof(TreeNode)) as TreeNode;
                TreeNode toNode = treeView1.GetNodeAt(treeView1.PointToClient(new Point(e.X, e.Y)));            if (fromNode != null && toNode != null)
                {
                    //判断toNode是不是fromNode的子节点,如果是则返回
                    TreeNode[] childs = fromNode.Nodes.Find(toNode.Name, true);
                    if (childs.Length > 0)
                    {
                        return;
                    }                treeView1.Nodes.Remove(fromNode);
                    toNode.Nodes.Add(fromNode);                treeView1.ExpandAll();
                }
            }
      

  8.   

         treeview  里面  没有这个事件吧,   treeView1_DragDrop    
    给点注释啊。。  我这个东西不是很懂 ?
    谢了
      

  9.   


    我是 建的web   项目 ,  我在treeview 的事件中没有看到你说的  那个   dragdrop事件我的里面只有  这些事件的:
      

  10.   

    那个web  的该怎么做了类。。  。。  给点意见或  源码咯 , 给源码的    顺便写点注释。。谢谢。