C#实现树型结构TreeView节点拖拽的简单功能,附全部源码,供有需要的参考

简介:

应用软件是否好用就体现在一些细节操作上,开发人员是否考虑到了很多细节,例如一个树形结构的数据若不支持拖拽功能那用起来会很糟糕一些,用户体验也会不太爽,下面就以通用权限管理系统组件源码中的组织机构(部门)管理模块为例子,讲解一下树型结构TreeView节点拖拽的简单功能实现。

 

   其实组织机构管理模块平时不怎么用到拖拽功能,但是往往在数据初始化时为了实现快速输入数据及进行整理调整数据时,往往就非常迫切需要一个灵活的组织机构管理器,当每到年底或者公司进行大的人事调整时也会遇到后台管理员迫切需要拖拽功能的需求,平时组织机构不会有大变动。

 

   软件功能是否好用,往往是体现在最需要折腾数据时是否好用?养兵千日用兵一时,一般没经过磨难的新开发的软件往往会想得不够周到,关键时刻容易掉链子,经不起客户的折腾。

 

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

   

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

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

本文转自jirigala_bao 51CTO博客,原文链接:http://blog.51cto.com/jirigala/809337
相关文章
|
12天前
|
数据采集 安全 JavaScript
C#医院手术麻醉信息管理系统源码 对接院内HIS、LIS、PACS
手麻系统的功能涵盖了麻醉临床业务管理、麻醉运营业务管理以及手术进程管理等,实现了将多种麻醉病历文书与医院HIS系统的有效关联,让手术室人员、设备资源和信息资源高度共享;实现了手术安排、各种统计报表等科室管理和科研工作的需求,可借其收集临床数据、进行整合分析,为围术期临床信息、管理、科研提供整体解决方案;该系统的运行,为医护人员提供了流程化、信息化、自动化、智能化的临床业务综合管理。
25 5
|
1月前
|
C# 数据库
40.c#:TreeView 控件
40.c#:TreeView 控件
18 1
|
3月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
48 0
|
3月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
26 0
|
3月前
|
安全 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用短曝光功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用短曝光功能(C#)
34 0
|
3月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
18 0
|
3月前
|
存储 编解码 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用UserSet功能保存和载入相机的各类参数(C#)
37 0
|
3月前
|
存储 数据管理 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置相机本身的数据保存(CustomData)功能(C#)
28 0
|
2天前
|
C#
【C#】 如何实现文本框历史记录提示功能
【C#】 如何实现文本框历史记录提示功能
13 0
|
9天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012