C#实现树型结构TreeView节点拖拽的简单功能(转)

简介: 本文摘抄博客园里面的牛人吉日嘎啦。http://www.cnblogs.com/jirigala  例子程序运行效果如何下:     当然在节点拖拽时,需要注意几个事情:   1:拖拽时总需要有提示信息比较好,防止误操作后找不到被托摘到哪里去了。

本文摘抄博客园里面的牛人吉日嘎啦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();
                }
            }
        }

 

 

 

目录
相关文章
|
7月前
|
C#
【C#】 如何实现文本框历史记录提示功能
【C#】 如何实现文本框历史记录提示功能
118 0
|
7月前
|
C# 数据库
40.c#:TreeView 控件
40.c#:TreeView 控件
73 1
|
1月前
|
开发框架 C# iOS开发
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
基于C#开源、功能强大、灵活的跨平台开发框架 - Uno Platform
|
1月前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
2月前
|
监控 前端开发 安全
C#一分钟浅谈:文件上传与下载功能实现
【10月更文挑战第2天】在Web应用开发中,文件的上传与下载是常见需求。本文从基础入手,详细讲解如何在C#环境下实现文件上传与下载。首先介绍前端表单设计及后端接收保存方法,使用`<input type="file">`与`IFormFile`接口;接着探讨错误处理与优化策略,如安全性验证和路径管理;最后讲解文件下载的基本步骤,包括确定文件位置、设置响应头及发送文件流。此外,还提供了进阶技巧,如并发处理、大文件分块上传及进度监控,帮助开发者构建更健壮的应用系统。
158 15
|
2月前
|
开发框架 Cloud Native .NET
10 个 C# 关键字和功能
10 个 C# 关键字和功能
61 8
|
7月前
|
编译器 C# 开发工具
C# 12 中新增的几大功能你都知道吗?
C# 12 中新增的几大功能你都知道吗?
|
2月前
|
物联网 C#
【C#】简单的蓝牙通讯功能实现
【C#】简单的蓝牙通讯功能实现
61 0
|
2月前
|
C#
如何使用c# 实现断点续传功能
如何使用c# 实现断点续传功能
32 0
|
2月前
|
网络协议 C#
C#:简化版的实现断点续传功能
C#:简化版的实现断点续传功能
38 0