C# TreeView 拖拽节点到另一个容器Panel中简单实现

用了这么久C#拖拽功能一直没有用到也就没用过,今天因为项目需要,领导特地给我简单讲解了下拖拽功能,真是的大师讲解一点通啊。特地写一篇博客记录下,分享给大家!也方便以后自己查看。

1.拖拽功能分析

拖拽功能分析其实就三个字:选-->拖-->放  什么意思,请看下图

本图大概就是将左侧TreeView中的节点拖拽到右侧的Panel控件中,然后根据业务处理想要的效果

拖拽过程分为三步:

  1. 将左侧的TreeView的节点选中
  2. 拖拽选中的节点
  3. 放入右侧panel容器中

2.拖拽用到的事件以及属性

对于TreeView控件需要监听:

  1. ItemDrag 事件(当用户开始拖动节点时发生)。

对于Panel控件:

  1. 开启Panel的AlowDrop属性设置为true  表示允许进行拖入操作
  2. DragEnter事件  在将对象拖入控件的边界时发生。

  3. DragDrop事件 在完成拖放操作时发生。

3.代码实现

这里拖入完成后的位置随便写的,自己研究吧!

         private void OnTreeView1ItemDrag(object sender, ItemDragEventArgs e)
{
IDataObject data = new DataObject(); data.SetData("Test", e.Item); //开始拖放操作
this.DoDragDrop(data, DragDropEffects.Copy);
} private void OnPanel1DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent("Test"))
e.Effect = DragDropEffects.Copy;
else
e.Effect = DragDropEffects.None;
} private void OnPanel1DragDrop(object sender, DragEventArgs e)
{
object item = e.Data.GetData("Test"); TreeNode node = (TreeNode)item;
Label label = new Label(); this.panel1.Controls.Add(label); label.AutoSize = true;
label.Location = new System.Drawing.Point(e.X - this.treeView1.Width - this.panel1.Location.X, e.Y - this.panel1.Location.Y);
label.Name = node.Name;
label.Size = new System.Drawing.Size(, );
label.TabIndex = ;
label.Text = node.Name; }

4.程序运行效果

实际上VS本身的工具箱应该都很熟悉,平时拖拽一个按钮控件等,就是这个拖拽

5.程序源代码

源代码工程文件下载

C# TreeView 拖拽节点到另一个容器Panel中简单实现的更多相关文章

  1. TREEVIEW拖拽对应修改目录

    附件:http://files.cnblogs.com/xe2011/TreeView_Drag_Directory%E6%93%8D%E4%BD%9C.rar     TREEVIEW拖拽对应修改目 ...

  2. winform 两个TreeView间拖拽节点

    /// <summary> /// 正在拖拽的节点 /// </summary> private TreeNode DragNode = null; /// <summa ...

  3. 拖拽图片到另一个div里

    HTML代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  4. Duilib的控件拖拽排序,支持跨容器拖拽(网易云信版本)

    完整代码见:https://github.com/netease-im/NIM_Duilib_Framework/pull/151 核心代码(思路): appitem.h #pragma once # ...

  5. 【拖拽可视化大屏】全流程讲解用python的pyecharts库实现拖拽可视化大屏的背后原理,简单粗暴!

    "整篇文章较长,干货很多!建议收藏后,分章节阅读." 一.设计方案 整体设计方案思维导图: 整篇文章,也将按照这个结构来讲解. 若有重点关注部分,可点击章节目录直接跳转! 二.项目 ...

  6. 重写TreeView,自定义图标,生成通行的下划线,取消默认获得焦点失去焦点的效果,并支持拖拽节点到外界

    1.运行效果: 2.前端代码 <UserControl x:Class="iPIS.UI.Base.Tree.VideoTreeControl" xmlns="ht ...

  7. Hyper-V无法文件拖拽解决方案~~~这次用一个取巧的方法架设一个FTP来访问某个磁盘,并方便的读写文件

    异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 服务器相关的知识点:http://www.cnblogs.com/dunitia ...

  8. TreeView 拖拽 增删改

    using Endv.Tools; using System; using System.Data; using System.Drawing; using System.IO; using Syst ...

  9. Jquery实现可拖拽的树菜单

    效果图例如以下所看到的:下载地址http://download.csdn.net/detail/javaquentin/8290417 <html xmlns="http://www. ...

随机推荐

  1. python基础-requests模块、异常处理、Django部署、内置函数、网络编程

     网络编程 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应. 校验返回值,进行接口测试: 编码:把一个Python对象编码转 ...

  2. TDG今日成立!

    大家好我们是来自土1603-3的佟天宇.杨子浩.吴强.周泊辰(从左到右) 我们的团队名称是  TDG队 我们的口号是:“Legends Never Die!” 队员简介: 佟天宇 个性:儒雅随和 特长 ...

  3. ASP.NET Core WebApi

    ASP.NET Core WebApi 创建项目 使用VS新建项目,选择ASP.NET Core WebAPI即可. 此时Startup的Configure.ConfigureService方法中如下 ...

  4. 网络编程之 keepalive(zz)

    link1: http://tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/ link2: http://dev.csdn.net/article/849 ...

  5. bootstrap-实现loading效果

    可以使用bootstrap的模态框(modal.js),使用它我们可以做出loading效果. html <!-- loading --> <div class="moda ...

  6. NLP第3章 中文分词技术

  7. ChartControl控件0和null的效果

    DevExpress的ChartControl虽然还不能完全代替Office图表(例如它暂时不支持添加数据表),但它算同类产品中相当优秀的了,下面是对0值和空值的处理. DataTable zeroD ...

  8. 使用elasticsearch分页时报max_result_window is too large的错误解决方案

    使用elasticsearch进行深度分页查询时的size-from大于10000的时候,会提示一个max_result_window is too large的错误. 官方推荐是scroll查询返回 ...

  9. ionic中android的返回键

    ionic中android的返回键 在ionic框架中已经注册了几个返回事件,分别是 view sideMenu modal actionSheet popup loading 他们的优先级分别是 v ...

  10. [jvm][面试]JVM 调优总结

    https://blog.csdn.net/wfh6732/article/details/57422967 堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-b ...