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
相关文章
|
11月前
|
XML 测试技术 API
利用C#开发ONVIF客户端和集成RTSP播放功能
利用C#开发ONVIF客户端和集成RTSP播放功能
5010 123
|
存储 安全 算法
基于 C# Trie 树的'管控员工上网 URL 过滤与匹配优化方案探索
本文探讨了 Trie 树在员工上网管控中的应用,分析其在 URL 实时过滤中的高效性,包括前缀匹配、存储优化和动态更新等优势,并提供 C# 实现方案,助力企业提升网络管理效率。
259 0
|
存储 SQL 开发框架
c# erp源码(简单进销存)
c# erp源码(简单进销存)
754 1
|
10月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
406 4
|
监控 算法 安全
基于 C# 基数树算法的网络屏幕监控敏感词检测技术研究
随着数字化办公和网络交互迅猛发展,网络屏幕监控成为信息安全的关键。基数树(Trie Tree)凭借高效的字符串处理能力,在敏感词检测中表现出色。结合C#语言,可构建高时效、高准确率的敏感词识别模块,提升网络安全防护能力。
331 2
|
存储 监控 算法
局域网上网记录监控的 C# 基数树算法高效检索方案研究
在企业网络管理与信息安全领域,局域网上网记录监控是维护网络安全、规范网络行为的关键举措。随着企业网络数据量呈指数级增长,如何高效存储和检索上网记录数据成为亟待解决的核心问题。基数树(Trie 树)作为一种独特的数据结构,凭借其在字符串处理方面的卓越性能,为局域网上网记录监控提供了创新的解决方案。本文将深入剖析基数树算法的原理,并通过 C# 语言实现的代码示例,阐述其在局域网上网记录监控场景中的具体应用。
307 7
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`<input type="file">`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
1114 16
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
724 3
|
传感器 IDE 测试技术
C#一分钟浅谈:Visual Studio IDE 高级功能
【10月更文挑战第24天】本文从初学者角度介绍了 Visual Studio 的高级功能,包括安装与配置、创建项目、运行与调试、常见问题及解决方案(如代码格式化、重构、导航、单元测试、代码分析),以及智能感知、Live Unit Testing、代码生成和代码片段等高级功能,帮助开发者提高效率和代码质量。
560 1
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
326 8