C# 获取往控件中拖进的文件或文件夹的信息(原创)

      在做C#的WinForm开发的时候,有时需要用户往指定的控件中拖进文件或者文件夹。然后根据用户拖进来的文件或者文件夹获取其信息并进行下一步操作。

      网络中百度或者谷歌一下有很多相关文章进行说明,不过很多都是不得的,或者说没有达到你所要的要求。刚好我这阵子弄一个东西需要到这样的操作,下面我们来探讨一下具体怎么实现。 

      实际上任何包含有AllowDrop属性的控件都会有对应的四个拖动事件:DragDrop、DragEnter、DragLeave和DragOver。

      相关说明:

            DragDrop:拖放操作完成时发生。

            DragEnter:在将对象拖入控件的边界时发生。

            DragLeave:在将对象拖出控件的边界时发生。

            DragOver:在将对象拖到控件的边界上发生。

 
 

      如果你不想在一拖动东西刚刚进到控件就触发事件,而是希望等你放开鼠标之后再触发。那你就不能使用DragEnter事件,而应该使用DragDrop事件。

      事实是:设置控件的AllowDrop属性为true之后,你双击控件的DragDrop事件,进入到事件的代码区,你会发现不管你拖动任何东西到控件中去,都不会触发DragDrop事件。

      同时,如果你双击控件的DragEnter事件,你拖动任何东西进去都会触发该事件。你设断点跟踪一下即可发现一下情况:

   

     你如果在DragEnter事件中更改DragEventArgs委托类型的参数e.Effect属性,比如,在DragEnter事件中写:

private void listView1_DragEnter(object sender, DragEventArgs e)

{

    e.Effect = DragDropEffects.None;//(使用DragEventArgs类型参数的Effect属性来设定所允许的置放操作。只要不是:e.Effect = DragDropEffects. None,其它都可以,这里的目的是触发DragDrop事件。)

}

      此时你往控件中拖动任何东西的时候都会触发DragDrop事件。这个时候你就可以把东西拖动进控件后,等你放开鼠标了才进行你想要的操作。这里涉及到.Net事件模型的运行机制。你可以通过更改同一个对象的(即控件,这里的例子用到的是ListView控件)DragEventArgs委托类型参数来实现触发同一个对象的其他事件。

      以下是我写的小例程,当拖动进来的是文件(或者文件夹)的时候,就弹出消息框,消息框内容显示拖动进来的文件(或者文件夹)的路径信息。当拖动进来的是文本内容的时候,label2控件就显示文本内容信息。

        private void listView1_DragEnter(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent(DataFormats.FileDrop))

            {

                e.Effect = DragDropEffects.Link;

            }

            else if (e.Data.GetDataPresent(DataFormats.Text))

            {

                e.Effect = DragDropEffects.Copy;

            }

        }

 
 

        private void listView1_DragDrop(object sender, DragEventArgs e)

        {

            if (e.Data.GetDataPresent(DataFormats.FileDrop))

            {

                string str = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString();

                MessageBox.Show(str, "提示信息", MessageBoxButtons.OK);

            }

            else if (e.Data.GetDataPresent(DataFormats.Text))

            {

                label2.Text = (e.Data.GetData(DataFormats.Text)).ToString();

            }

        }

C# 获取往控件中拖进的文件或文件夹的信息的更多相关文章

  1. UGUI 之获取当前控件的高度

    当Canvas Scaler选择Constant Pixel Size 当前的分辨率会被被固定,可以用RectTransform类里面的.rect变量值获取 height或Width. 在次情况下获取 ...

  2. winfrom获取用户控件里的控件对象

    如何获取用户控件里的控件对象呢,其实思路也是很简单的, 比如有一个panel 用户控件 里面有许多的其他控件. 那么要找出一个Label控件怎么找呢,好的.现在我们就开始 首先,一个foreach循环 ...

  3. 获取android控件的高度

    问题 如何获取一个控件的长和高,相信很多朋友第一眼看见这个问题都会觉得很简单,直接在onCreate里面调用getWidth.getMeasuredWidth不就可以获得了吗,但是,事实上是并没有简单 ...

  4. .net获取select控件中的文本内容

    .net获取select控件中的文本内容 2009-11-28 21:19小V古 | 分类:C#/.NET | 浏览1374次 <select id="SecType" st ...

  5. JS获取用户控件中的子控件Id

    用户控件 <asp:HiddenField ID="hfGradeId" runat="server" /> <asp:HiddenField ...

  6. 获取Repeater控件中的每一项数据

    var items = rptList.Items;//获取Repeater控件的所有项 foreach (RepeaterItem item in items)//遍历每一项内容 {   var t ...

  7. JS 获取Button控件的提交类型

    <script type="text/javascript"> <!--获取button控件的类型---> function isAuditOrCancel ...

  8. WPF:获取DataGrid控件单元格DataGridCell

    转载:http://blog.csdn.net/jhqin/article/details/7645357 /* ------------------------------------------- ...

  9. WPF获取原始控件样式。

    要获取WPF控件的原始样式,需要我们安装Blend for Visual Studio. 然后,我们打开Blend for Visual Studio,创建一个WPF项目. 然后,我们向页面拖动一个B ...

随机推荐

  1. linux命令: 两个查找工具 locate,find

    linux 中有很多查找工具,今天主要讲解locate,find两个工具. 1.locate (1)查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db 注意:如果这 ...

  2. Web开发——HTML基础(文件和网站结构)

    参考: 参考:Document and website structure 参考:使用HTML部分和大纲 目录: 1.基本部分 2.用于构造内容的HTML 编辑 2.1 主动学习:探索我们的例子的代码 ...

  3. [qemu][kvm] 在kvm嵌套kvm的虚拟机里启动kvm加速

    常规情况下,如果在kvm的虚拟机里,又想使用kvm的虚拟机,会报如下的错误信息: [root@host0 nlb]# Could not access KVM kernel module: No su ...

  4. el表达式(一)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. 对象何时进入老年代、何时发生full gc

    一.对象何时进入老年代 (1)当对象首次创建时, 会放在新生代的eden区, 若没有GC的介入,会一直在eden区, GC后,是可能进入survivor区或者年老代 (2)当对象年龄达到一定的大小 , ...

  6. 前端的图片压缩image-compressor(可在图片上传前实现图片压缩)

    https://www.imooc.com/article/40038 https://www.jianshu.com/p/3ce3e3865ae2 前端的图片压缩image-compressor(可 ...

  7. outlook2016用Exchange轻松绑定腾讯企业邮箱

    系统版本:Win10 X64 1709 英文版 邮箱:Outlook2016 背景知识: 1.发送邮件均使用SMTP协议(SMTP 全称“Simple Mail Transfer Protocol”, ...

  8. 2019年度【计算机视觉&机器学习&人工智能】国际重要会议汇总

    简介 每年全世界都会举办很多计算机视觉(Computer Vision,CV). 机器学习(Machine Learning,ML).人工智能(Artificial Intelligence ,AI) ...

  9. 开发流程(Vue)

    1.当你拿到一个需求时,先不要着急完成静态页面 2.重点观察数据结构,进行数据的分析,包括前端所需要的数据类型从而进行数据类型定义(如果是前后端分离的情况下,建议不要考虑前端数据和数据库的数据类型对应 ...

  10. linux和Windows下用sublime text3编译运行C,C++

    安装MinGW 1.首先安装MinGW,默认安装位置是C:\MinGW. 2.安装完成后,右键“我的电脑”->属性 ->高级->环境变量,在系统环境变量PATH里添加C:\MinGW ...