C#的拖拽

本文将以Winform为例

有两个主要的事件:

DragEnter 拖拽到区域中触发的事件

DragDrop 当拖拽落下的时候出发此事件

饮水思源

参考博客: http://www.cnblogs.com/gossip/archive/2010/02/22/1671126.html

Demo 模拟拖拽上传

我们在开发中有时候回用到拖拽上传的功能,例如QQ邮箱上传附件的时候,博客园Mark Down编辑器上传图片的时候。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace StudyDrag
{
public partial class frmDragUpload : Form
{
public frmDragUpload()
{
InitializeComponent();
} /// <summary>
/// 初始化属性
/// </summary>
void Init()
{
//设置为允许拖拽
this.AllowDrop = true;
} /// <summary>
/// 注册事件
/// </summary>
void RegisteEvent()
{
this.DragEnter += FrmDragUpload_DragEnter;
this.DragDrop += FrmDragUpload_DragDrop;
} /// <summary>
/// 当在此区域拖动落下的时候出发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmDragUpload_DragDrop(object sender, DragEventArgs e)
{
//获取拖动的数据
IDataObject ido = e.Data;
//如果拖动的数据是文件类型
if (ido.GetDataPresent(DataFormats.FileDrop))
{
//获取文件的路径
string[] paths = (string[])ido.GetData(DataFormats.FileDrop); //执行我们想要执行的业务逻辑,读取上传到服务器等等。
foreach (var item in paths)
{
Console.WriteLine(item);
}
MessageBox.Show("上传成功!");
}
else
{
MessageBox.Show("上传类型错误!");
}
} /// <summary>
/// 当拖动到此区域的时候触发
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void FrmDragUpload_DragEnter(object sender, DragEventArgs e)
{
//设置拖动的影响为:从拖动源复制到拖动的目标
e.Effect = DragDropEffects.Copy;
} /// <summary>
/// 窗体初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmDragUpload_Load(object sender, EventArgs e)
{
this.Init();
this.RegisteEvent();
}
}
}

Demo 2 ListView拖拽到TreeView上

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace StudyDrag
{
public partial class frmDragListView : Form
{
public frmDragListView()
{
InitializeComponent();
} /// <summary>
/// 初始化属性
/// </summary>
void Init()
{
this.lbDep.AllowDrop = true;
this.tvDep.AllowDrop = true;
} /// <summary>
/// 加载一些数据
/// </summary>
void LoadData()
{
for (int i = 1; i <= 10; i++)
{
string itemValue = "有关部门" + i.ToString();
this.lbDep.Items.Add(itemValue);
}
} void RegisterEvent()
{
this.tvDep.DragDrop += TvDep_DragDrop;
this.tvDep.DragEnter += TvDep_DragEnter;
} /// <summary>
/// 当拖拽进入到该区域的时候出发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TvDep_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
} /// <summary>
/// 当完成退拽时触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void TvDep_DragDrop(object sender, DragEventArgs e)
{
string item = (string)e.Data.GetData(DataFormats.Text);
this.tvDep.Nodes.Add(item);
} /// <summary>
/// 窗体初始化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void frmDragListView_Load(object sender, EventArgs e)
{
Init();
LoadData();
RegisterEvent();
} /// <summary>
/// 鼠标点击的的时候开始执行拖拽操作
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lbDep_MouseDown(object sender, MouseEventArgs e)
{
if (lbDep.SelectedItem == null)
{
return;
} lbDep.DoDragDrop(lbDep.SelectedItem, DragDropEffects.Copy);
}
}
}

源码下载

我的码云:https://git.oschina.net/ShareKnowledge/drag

C#拖拽操作的更多相关文章

  1. WPF 的拖拽操作(DragDrop)

    在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样.如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化.重要的区别是用于拖放操作的方法和事 ...

  2. 微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)

    touchstart     手指触摸动作开始 touchmove    手指触摸后移动 touchcancel  手指触摸动作被打断,如来电提醒,弹窗 touchend      手指触摸动作结束 ...

  3. H5 拖拽操作

    H5 拖拽操作 前言 在原生H5中,可以通过提供的api实现在网页内元素的拖拽操作.相对于传统的写法更加的简单. 而想要实现拖拽,主要需要进行两个方面的工作,第一是给元素设置draggable='tr ...

  4. selenium中各个模块操作:下拉框、鼠标悬浮连贯、拼图拖拽操作、以及其他拖拽操作、连线操作

    1.下拉框的修改操作 方法一:定位到元素后,通过select选择对应的值 方法二:通过两次点击的方法:没有select的value属性时,采用click两次的方法去选择: click第一次后,出现下拉 ...

  5. 爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作

    回到目录 上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除 ...

  6. MVC小系列(十五)【MVC+ZTree实现对树的CURD及拖拽操作】

    根据上一讲的可以加载一棵大树,这讲讲下如果操作这颗大树 <link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle ...

  7. MVC+ZTree实现对树的CURD及拖拽操作

    上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除节点,编辑 ...

  8. 【PUPPETEER】初探之拖拽操作(五)

    一.知识点 page.mouse elementHandle.boundingBox() ignoreDefaultArgs:['--enable-automation']   waitUntil 二 ...

  9. javascript拖拽操作

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. codeforces9D How many trees?

    传送门:http://codeforces.com/problemset/problem/9/D [题解] 树形dp,f(i,j)表示i个节点,高度为j的方案数,枚举左子树大小和哪一个子树高度为j-1 ...

  2. EOJ Monthly 2019.2 (based on February Selection) D.进制转换

    题目链接: https://acm.ecnu.edu.cn/contest/140/problem/D/ 题目: 思路: 我们知道一个数在某一个进制k下末尾零的个数x就是这个数整除kx,这题要求刚好末 ...

  3. php的几个实用正则表达式

    更多内容推荐微信公众号,欢迎关注: 此文章是网上搜索而来: 对于开发人员来说,正则表达式是一个非常有用的功能,它提供了 查找,匹配,替换 句子,单词,或者其他格式的字符串.这篇文章主要介绍了15个超实 ...

  4. 配置多个ssh-key

    搞了三天没搞出来,还在男朋友面前哭了一场,真心觉得我只该吃屎,我好没用.哎.. 首先在上一篇记录了如何生成ssh-key,并使本地可以通过ssh的方式克隆和推送项目.但如果你有个github账号,有个 ...

  5. classList属性

    1.传统方法: 在操作类名的时候,需要通过className属性添加.删除和替换类名.如下面例子: ? 1 <div class="bd user disabled"> ...

  6. VUE和ES6资源收集

    MDN https://developer.mozilla.org/zh-CN/docs/Web/JavaScript https://developer.mozilla.org/en/docs/We ...

  7. elasticsearch-head插件安装的一些坑!es6.5.4版本

    折腾了一晚上,总算成功了!,大部分坑都记录了下来,版本升级太快真实个大坑,每个版本都不一样,学的心累!! 这坑太多了!主要就是以下几点最主要的: 因为我这里只使用hear安装,不使用哪个打包工具,所以 ...

  8. 【codeforces】【比赛题解】#868 CF Round #438 (Div.1+Div.2)

    这次是Div.1+Div.2,所以有7题. 因为时间较早,而且正好赶上训练,所以机房开黑做. 然而我们都只做了3题.:(. 链接. [A]声控解锁 题意: Arkady的宠物狗Mu-mu有一只手机.它 ...

  9. Git管理本地代码(一)【转】

    转自:http://blog.csdn.net/weihan1314/article/details/8677800 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   安 ...

  10. Linux内核跟踪之syscall tracer 【转】

    转自:http://blog.chinaunix.net/uid-20543183-id-1930847.html ------------------------------------------ ...