当前位置: 首页 > news >正文

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();
                }
            }
        }

 

 

 

相关文章:

  • Cacti操作手册——多张CPU图整合为一张图操作详解
  • 并查集——hdu1213(入门)
  • FIRST集和FOLLOW集的定义和计算方法
  • 字体自适应
  • 1011.在线视频—shell脚本系列讲座(一)shell脚本与应用示例
  • ArcGIS Server 体系结构
  • Python:pygame游戏编程之旅五(游戏界面文字处理详解)
  • HDU 5358 First One(枚举)
  • 数据库回归测试
  • SELinux深入理解
  • Android应用资源---绘制资源类型(Drawable)(五)
  • 查看 SELinux状态及关闭SELinux
  • Linux下Qt与mysql建立连接
  • poj 2192 Zipper
  • centos下查看tomcat的版本号
  • [LeetCode] Wiggle Sort
  • 【comparator, comparable】小总结
  • 345-反转字符串中的元音字母
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Android框架之Volley
  • Angular4 模板式表单用法以及验证
  • eclipse(luna)创建web工程
  • iOS编译提示和导航提示
  • rc-form之最单纯情况
  • SwizzleMethod 黑魔法
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • vuex 笔记整理
  • 安装python包到指定虚拟环境
  • 简析gRPC client 连接管理
  • 爬虫模拟登陆 SegmentFault
  • 漂亮刷新控件-iOS
  • 前端学习笔记之观察者模式
  • 数据可视化之 Sankey 桑基图的实现
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 用jquery写贪吃蛇
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​决定德拉瓦州地区版图的关键历史事件
  • #{} 和 ${}区别
  • #DBA杂记1
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $jQuery 重写Alert样式方法
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (差分)胡桃爱原石
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (四)汇编语言——简单程序
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .Net 6.0 处理跨域的方式
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net与java建立WebService再互相调用
  • [ 云计算 | AWS ] 对比分析:Amazon SNS 与 SQS 消息服务的异同与选择
  • []Telit UC864E 拨号上网