C#拖拽操作
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#拖拽操作的更多相关文章
- WPF 的拖拽操作(DragDrop)
在WPF中似乎没有对拖拽操作进行改变,和以前的方式一样.如果曾近在 Windows 窗体应用程序中使用过鼠标拖放,就会发现在 WPF 中的编程接口实际上没有发生变化.重要的区别是用于拖放操作的方法和事 ...
- 微信小程序~触摸相关事件(拖拽操作、手势识别、多点触控)
touchstart 手指触摸动作开始 touchmove 手指触摸后移动 touchcancel 手指触摸动作被打断,如来电提醒,弹窗 touchend 手指触摸动作结束 ...
- H5 拖拽操作
H5 拖拽操作 前言 在原生H5中,可以通过提供的api实现在网页内元素的拖拽操作.相对于传统的写法更加的简单. 而想要实现拖拽,主要需要进行两个方面的工作,第一是给元素设置draggable='tr ...
- selenium中各个模块操作:下拉框、鼠标悬浮连贯、拼图拖拽操作、以及其他拖拽操作、连线操作
1.下拉框的修改操作 方法一:定位到元素后,通过select选择对应的值 方法二:通过两次点击的方法:没有select的value属性时,采用click两次的方法去选择: click第一次后,出现下拉 ...
- 爱上MVC3~MVC+ZTree实现对树的CURD及拖拽操作
回到目录 上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除 ...
- MVC小系列(十五)【MVC+ZTree实现对树的CURD及拖拽操作】
根据上一讲的可以加载一棵大树,这讲讲下如果操作这颗大树 <link href="../../Scripts/JQuery-zTree/css/zTreeStyle/zTreeStyle ...
- MVC+ZTree实现对树的CURD及拖拽操作
上一讲中,我们学习了如何使用zTree对一棵大树(大数据量的树型结构的数据表,呵呵,名称有点绕,但说的是事实)进行异步加载,今天这讲,我们来说说,如何去操作这棵大树,无非就是添加子节点,删除节点,编辑 ...
- 【PUPPETEER】初探之拖拽操作(五)
一.知识点 page.mouse elementHandle.boundingBox() ignoreDefaultArgs:['--enable-automation'] waitUntil 二 ...
- javascript拖拽操作
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
随机推荐
- 20155234 2016-2017-2 《Java程序设计》第5周学习总结
20155234 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 Java中所有错误都会被打包为对象,运用try.catch,可以在错误发生时显示友好的错误信 ...
- 【leetcode 简单】 第九十九题 字符串相加
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和. 注意: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num1 和num2 都不包 ...
- 电脑蓝屏提示unexpected store exception的解决方法
在我们使用电脑的过程中常常会遇到许多问题,对于许多不熟悉电脑的用户常常摸不着头脑,而部分用户在使用电脑时,电脑常常出现蓝屏的情况,并提示你的电脑遇到问题需要重新启动,与此同时,其报告错误代码为“une ...
- asp.net 获取音视频时长 的方法
http://www.evernote.com/l/AHPMEDnEd65A7ot_DbEP4C47QsPDYLhYdYg/ 日志: 1.第一种方法: 调用:shell32.dll ,win7 ...
- Southwestern Europe Regional Contest 2015 题解
题目链接:http://codeforces.com/gym/101128 题目数7/10 Rank 34/209 A: 题意:给出一张n个点的有向图表示一家有n个员工的公司的隶属图,u->v表 ...
- MyEclipse中Source not found的问题
1.问题描述 在MyEclipse中想查看源码,结果显示:Source not found ......(大概的意思就是找不到源码包) 2.解决方案 下载相应版本的apache-tomcat-8.5. ...
- FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑
FFmpeg_Tutorial FFmpeg工具和sdk库的使用demo 一.使用FFmpeg命令行工具和批处理脚本进行简单的音视频文件编辑 1.基本介绍 对于每一个从事音视频技术开发的工程师,想必没 ...
- 洛谷P3088 挤奶牛
传送门啦 这个题也是一个单调队列来优化的 $ dp $ ,我们考虑这个题,这个题让我们求出有多少奶牛会觉得拥挤,如果我们还像琪露诺那个题那样单纯用一次单调队列肯定是不行的,因为牛觉不觉得拥挤是受左右的 ...
- Linux学习笔记:输入输出重定向 >>命令
Linux重定向是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变.比如说我不想看到在显示器的输出,而是希望输出到某一文件中就可以通过Linux重定向来进行这项工作. 将stdout重定 ...
- Knockout.Js官网学习(模版绑定)
模板绑定器 如今页面结构越来越复杂,仅仅依靠foreach已经不足以我们的使用,这个时候我们就需要模板的存在,模板的优点自然很多,首先会让页面整洁,同时修改起来也可以方面的定位,最重要的是ko可以条件 ...