首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于TreeView的拖动排序有关问题?

2012-02-07 
关于TreeView的拖动排序问题??????????????我用以下代码实现TreeView的拖动问题usingSystemusingSystem.C

关于TreeView的拖动排序问题??????????????
我用以下代码实现TreeView的拖动问题
using   System;
using   System.Collections.Generic;
using   System.ComponentModel;
using   System.Data;
using   System.Drawing;
using   System.Text;
using   System.Windows.Forms;

namespace   TreeViewTest
{
        public   partial   class   Form1   :   Form
        {
                public   Form1()
                {
                        InitializeComponent();
                }
                private   Point   Position   =   new   Point(0,   0);
                private   void   Form1_Load(object   sender,   EventArgs   e)
                {
                     
                        this.tvwTest.ExpandAll();
                }

                private   void   tvwTest_ItemDrag(object   sender,   ItemDragEventArgs   e)
                {
                        DoDragDrop(e.Item,   DragDropEffects.Move);
                }

                private   void   tvwTest_DragEnter(object   sender,   DragEventArgs   e)
                {
                        if   (e.Data.GetDataPresent(typeof(TreeNode)))
                                e.Effect   =   DragDropEffects.Move;
                        else
                                e.Effect   =   DragDropEffects.None;

                }


                private   void   tvwTest_DragDrop(object   sender,   DragEventArgs   e)
                {
                        TreeNode   myNode   =   null;
                        if   (e.Data.GetDataPresent(typeof(TreeNode)))
                        {
                                myNode   =   (TreeNode)(e.Data.GetData(typeof(TreeNode)));
                        }
                        else
                        {


                                MessageBox.Show( "error ");
                        }
                        Position.X   =   e.X;
                        Position.Y   =   e.Y;
                        Position   =   tvwTest.PointToClient(Position);
                        TreeNode   DropNode   =   this.tvwTest.GetNodeAt(Position);
                        //   1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
                        if   (DropNode   !=   null   &&   DropNode.Parent   !=   myNode   &&   DropNode   !=   myNode)
                        {
                                TreeNode   DragNode   =   myNode;
                                //   将被拖拽节点从原来位置删除。
                                myNode.Remove();
                                //   在目标节点下增加被拖拽节点
                                DropNode.Nodes.Add(DragNode);
                        }
                        //   如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
                        if   (DropNode   ==   null)
                        {
                                TreeNode   DragNode   =   myNode;
                                myNode.Remove();
                                tvwTest.Nodes.Add(DragNode);
                        }


                }
        }
}
上述代码实现将一个节点拖拽到别的节点下做为子节点,
但我想实现在上述功能的基础上,实现将两个子节点或两个根节点通过拖拽调换位置,
node1
node2
拖拽后
node2
node1
是平级的关系
谢谢

[解决办法]
参考一下这个源代码:

http://bbs.msproject.cn/default.aspx?g=posts&t=299

热点排行