zoukankan      html  css  js  c++  java
  • C#实现树型结构TreeView节点拖拽的简单功能(转)

    本文摘抄博客园里面的牛人吉日嘎啦http://www.cnblogs.com/jirigala

     例子程序运行效果如何下:

      


      当然在节点拖拽时,需要注意几个事情:


       1:拖拽时总需要有提示信息比较好,防止误操作后找不到被托摘到哪里去了。


       2:父亲节点总不能拖拽到自己的子节点上,那不是死循环或者乱了辈份了不是?


      为了让TreeView支持拖拽功能,需要注意以下几个属性设置及相应的事件代码。



     


      

     代码实现参考如下:

           private void tvOrganize_ItemDrag(object sender, ItemDragEventArgs e)
            {
                if (this.permissionEdit)
                {
                    // 开始进行拖放操作,并将拖放的效果设置成移动。
                    this.DoDragDrop(e.Item, DragDropEffects.Move);
                }
            }


            private void tvOrganize_DragEnter(object sender, DragEventArgs e)
            {
                // 拖动效果设成移动
                e.Effect = DragDropEffects.Move;
            }


            private void tvOrganize_DragDrop(object sender, DragEventArgs e)
            {
                // 定义一个中间变量
                TreeNode treeNode;
                //判断拖动的是否为TreeNode类型,不是的话不予处理
                if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode"false))
                {
                    // 拖放的目标节点
                    TreeNode targetTreeNode;
                    // 获取当前光标所处的坐标
                    
    // 定义一个位置点的变量,保存当前光标所处的坐标点
                    Point point = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
                    // 根据坐标点取得处于坐标点位置的节点
                    targetTreeNode = ((TreeView)sender).GetNodeAt(point);
                    // 获取被拖动的节点
                    treeNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
                    // 判断拖动的节点与目标节点是否是同一个,同一个不予处理
                    if (BaseInterfaceLogic.TreeNodeCanMoveTo(treeNode, targetTreeNode))
                    {
                        if (BaseSystemInfo.ShowInformation)
                        {
                            // 是否移动部门
                            if (MessageBox.Show(AppMessage.Format(AppMessage.MSG0038, treeNode.Text, targetTreeNode.Text), AppMessage.MSG0000, MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                            {
                                return;
                            }
                        }
                        ServiceManager.Instance.OrganizeService.MoveTo(UserInfo, treeNode.Tag.ToString(), targetTreeNode.Tag.ToString());
                        // 往目标节点中加入被拖动节点的一份克隆
                        targetTreeNode.Nodes.Add((TreeNode)treeNode.Clone());
                        // 将被拖动的节点移除
                        treeNode.Remove();
                    }
                }
            }
  • 相关阅读:
    Mysql查漏补缺
    RabbitMQ学习笔记
    memcache学习笔记
    Redis问题整理
    JedisCluster获取key所在的节点
    JavaSE编程题
    IDEA快捷键 日常整理
    Idea 常用快捷键列表
    【C++】 构造函数为什么不能声明为虚函数,析构函数可以
    【算法笔记】买卖股票问题--DP/贪心算法
  • 原文地址:https://www.cnblogs.com/51net/p/2454524.html
Copyright © 2011-2022 走看看