最近一个项目要用到从listview向treeview拖动item,达到从外部拖动图标成为树形结构的一部分,通过查阅资料总结了一些实现方式,分享给大家。这是winform中的例子。

在进行拖放操作之前,必须要对进行拖放操作的组件的"AllowDrop"属性值设定为"True",因为此属性是确定组件是否可以进行拖放操作的。  
     我们会用到三种事件:"ItemDrag"、"DragEnter"、"DragDrop"。其中只有第一种事件是在源组件中触发的,另外二种事件是在目标组件中触发的。其中当用户拖动组件触发"ItemDrag"事件;当拖动数据进入目标组件区域触发"DragEnter"事件;当用户在目标组件区域放置拖动的数据触发"DragDrop"事件。

实现代码如下:

 1  private void listView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
 2         {
 3             this.DoDragDrop(e.Item,DragDropEffects.Move);
 4         }
 5 
 6         private void listView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
 7         {
 8             e.Effect=DragDropEffects.Move;
 9         }
10 
11         private void treeView1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
12         {
13             //判定是否现在拖动的数据是LISTVIEW项
14             ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); 
15             if (lvi != null) 
16             { 
17                 e.Effect = DragDropEffects.Move; 
18             } 
19             else 
20                 Cursor = Cursors.No; 
21 
22         }
23         private void treeView1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
24         {
25             //获得拖放中的项
26             ListViewItem lvi = (ListViewItem)e.Data.GetData(typeof(ListViewItem)); 
27 
28             //根据鼠标坐标确定要移动到的目标节点
29             Point pt;
30             TreeNode targeNode;
31             pt = ((TreeView)(sender)).PointToClient(new Point(e.X, e.Y));
32             targeNode = this.treeView1.GetNodeAt(pt);
33             TreeNode NewMoveNode  =new TreeNode(lvi.Text);
34             if(targeNode!=null)//如果目标节点未选中,则添加到一级节点
35             {
36                 targeNode.Nodes.Add(NewMoveNode);
37                 //更新当前拖动的节点选择
38                 treeView1.SelectedNode = NewMoveNode;
39                 //展开目标节点,便于显示拖放效果
40                 targeNode.Expand();
41                 treeView1.Refresh();
42             }
43             else
44             {
45                 this.treeView1.Nodes.Add(NewMoveNode);
46                 //更新当前拖动的节点选择
47                 treeView1.SelectedNode = NewMoveNode;
48                 //展开目标节点,便于显示拖放效果
49                 treeView1.ExpandAll();
50                 treeView1.Refresh();
51             }
52 
53             
54         }

最后不要忘记添加相应的事件!

这样就可以实现简单的从外部拖动节点到树形结构中了。关于插入图片在下一篇文章中介绍。

转载于:https://www.cnblogs.com/kyle_zhao/archive/2009/12/25/1631943.html

在winform中从外部拖动节点到树形结构(treeview和listview相互拖动)(一)相关推荐

  1. Winform中双击DevExpress的TreeList的树形节点怎样获取当前节点

    场景 DevExpress的TreeList怎样设置数据源,从实例入手: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10254 ...

  2. mysql 叶子节点_MySQL 树形结构 根据指定节点获取其所有叶子节点

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...

  3. 根据根节点和子节点构造树形结构

    package com.cyc.basic.test.list;import com.alibaba.fastjson.JSON; import lombok.Data;import java.uti ...

  4. mysql获取当前节点的所有叶子节点_MySQL 树形结构 根据指定节点 获取其所有叶子节点...

    背景说明 需求:MySQL树形结构, 根据指定的节点,获取其下属的所有叶子节点. 叶子节点:如果一个节点下不再有子节点,则为叶子节点. 问题分析 1.可以使用类似Java这种面向对象的语言,对节点集合 ...

  5. JavaScript中的扁平化数据转换为树形结构、树形结构扁平化数据

    1. 扁平化数据 ---- > 树形结构 1.1 第一种数据类型 原始数据只有id和pId相互关联 let data = [{ id: 639, name: "商品管理", ...

  6. mysql树形结构查询_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  7. 数据库中的层次模型是什么(树形结构)

    在格式化模型中,实体用记录表示,实体的属性对应记录的数据项(或字段). 层次模型所满足的两个条件: 有且只有一个结点没有双亲结点,这个结点称为根结点. 根节点以外的其他结点有且只有一个双亲结点 在层次 ...

  8. mysql 树形结构 sql_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  9. mysql 递归查询树型结构_MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

最新文章

  1. step如何打开服务器项目,STEP7项目打开及删除
  2. 别把个人信息“玩”丢了
  3. 项目2---机柜和物理服务器
  4. Openjudge-NOI题库-和为给定数
  5. Python常用编程模块汇总
  6. Linux x64 下 Matlab R2013a 300 kb 脚本文件调试的 CPU 占用过高问题的解决办法
  7. 3 linux禁用ssl_ESXI申请阿里云SSL证书并配置
  8. 要打造一款稳定顺滑、火遍全球的游戏?云将成为你的坚实后盾
  9. 万人报名2020腾讯广告算法大赛,顶级技术争锋正式开战!
  10. Divergent series
  11. 提取PCA变换后的图像的各主成分(matlab代码)
  12. Atitti usrQBf1801 翻页控件规范  v2
  13. [转]SREng扫描报告分析
  14. go语言学习-Any类型
  15. 终其一生只是个普通人,你会后悔吗?
  16. PPT模板 | 湖南农业大学汇报通用PPT模板
  17. 计算机如果没有什么 就无法启动,电脑开机没有任何反应
  18. 中国电信北京研究院 孙琼:中国电信的SDN应用与实践初探
  19. linux 五种 IO 模型
  20. 彻底解决WPS右键没有新建文件的问题

热门文章

  1. 雷林鹏分享:MySQL 及 SQL 注入
  2. 国贫县山西永和:“一揽子”保险“保”脱贫
  3. 如何在 Vue 项目中使用 echarts
  4. java中缀表达式转后缀表达式(逆波兰算法)
  5. 数组的有关属性和方法
  6. 如何实现两个路由下的电脑互相访问
  7. 基于OHCI的USB主机 —— 结束语
  8. 机器学习模型 知乎_机器学习:模型评估之评估方法
  9. npm构建脚本_NPM脚本简介
  10. Web漏洞扫描(一:利用WVS进行漏洞扫描)