本文假定您熟悉下列主题:

  • Windows 窗体列表框控件
  • Windows 窗体事件处理

生成示例的步骤

列表框控件提供了您需要处理的两个拖放事件: DragEnter 和 DragDrop。 当您在控件的边界内拖动对象时,便会发生DragEnter 事件;该事件用于确定当前拖动的对象是不是您要放到控件上的对象。 在将一个或多个文件拖到控件上时,需要处理此事件。 这使得在将对象拖到控件上方时,能够根据所拖动的对象显示相应的图标。 将拖动的对象释放到控件上时,会发生DragDrop 事件。 通过处理此事件可以检索对象。 Data 对象用于检索数据。

Data 对象的 GetData 方法返回一个字符串数组,该数组包含拖到该列表框控件中的文件的完整路径名。 您可以使用此文件路径信息来执行需要对文件执行的任何操作。 例如,可以使用 System.IO 命名空间中的类来打开并读取文件、移动文件或将文件复制到一个新位置。 在此示例中,您只是添加了拖到列表框控件中的文件的完整路径。

若要在 Visual C# .NET 应用程序中提供文件拖放功能,请按以下步骤操作:

  1. 在 Visual C# .NET 中新建一个 Windows 窗体应用程序。默认情况下将创建 Form1。
  2. 使用工具框向 Form1 添加一个列表框控件。
  3. 在“属性”窗口中,将该列表框控件的 AllowDrop 属性更改为 True,以允许将对象拖到控件上。
  4. 在解决方案资源管理器中,右键单击 Form1,然后单击查看代码
  5. 若要处理 DragEnter 事件,请将下面的方法添加到 Windows 窗体设计器在 Form1 类中生成的代码段下面:
    private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
    {
    if(e.Data.GetDataPresent(DataFormats.FileDrop))
    e.Effect = DragDropEffects.All;
    else
    e.Effect = DragDropEffects.None;
    }
  6. 若要处理 DragDrop 事件,请将下面的方法添加到 Form1 类中,紧挨在第 5 步中添加的方法后面:
    private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
    {
    string[] s = (string[]) e.Data.GetData(DataFormats.FileDrop, false);
    int i;
    for(i = 0; i < s.Length; i++)
    listBox1.Items.Add(s[i]);
    }
  7. 若要将这两个事件处理程序与控件事件相关联,请将以下代码添加到 Form1 的 InitializeComponent 方法中。 确保将此代码添加到已实例化 ListBox1 后的位置:
    this.listBox1.DragDrop += new
    System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
    this.listBox1.DragEnter += new
    System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
  8. 生成并运行该项目。
  9. 将一个或多个文件从桌面或另一文件夹拖到列表框控件中。 您会注意到,文件的完整路径添加到了列表框控件中。

参考

有关更多信息,请参见下面的 Microsoft Developer Network (MSDN) Web 站点:

属性

文章编号: 307966 - 最后修改: 2007年5月13日 - 修订: 1.1
这篇文章中的信息适用于:
  • Microsoft Visual C# .NET 2002 标准版
关键字:
kbhowto kbhowtomaster KB307966
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

HOW TO: 在 Visual C# .NET 应用程序中提供文件拖放功能的更多相关文章

  1. 在.NET程序中实现HttpServer功能

    亲爱的下午茶   博客园 首页 新随笔 联系 订阅 管理 随笔-6  文章-0  评论-10  在.NET程序中实现HttpServer功能   最近在实现一个可视化数据解析工具,需要在Wpf程序中实 ...

  2. 微信小程序中悬浮窗功能的实现(主要探讨和解决在原生组件上的拖动)

    问题场景 所谓悬浮窗就是图中微信图标的按钮,采用fixed定位,可拖动和点击. 这算是一个比较常见的实现场景了. 为什么要用cover-view做悬浮窗?原生组件出来背锅了~ 最初我做悬浮窗用的不是c ...

  3. 小程序中内容审核功能的使用(后台使用thinkPHP5.1)

    本文包含文本和图片的检测 //接收要检测的文本内容并调用检测方法 public function textCheck(Request $request){ //内容安全识别 $data['conten ...

  4. 查看.NET应用程序中的异常(上)

    内存转储是查明托管.NET应用程序中异常的原因的一种极好的方法,特别是在生产应用程序中发生异常时.当您在无法使用Visual Studio的应用程序中跟踪异常时,cdb和sos.dll的使用技术就变成 ...

  5. Fastreport使用经验(转)在Delphi程序中访问报表对象

    Fastreport使用经验(转) 在Delphi程序中访问报表对象 最基本的方法就是frxReport1.FindObject. 然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东 ...

  6. visual studio 开发linux程序

    VisualGDB支持Linux的原理是,通过ssh连接到Linux系统上通过ssh给linux下达命令 . (类似visualgdb的有windgb  ,这2个都是商业软件.) Visual GDB ...

  7. win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题。取消安装。”处理方法

    win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题.取消安装.”处理方法 vs2008试用期到期,卸载.重新安装都会出现“ 加载安装组件时遇到问题.取消安装.”无 ...

  8. visual studio 2010 winform程序不能添加对system.web的引用

    visual studio 2010 winform程序不能添加对system.web的引用[转载] 需要引用到System.Web.发现没有“System.Web”.在通过“浏览”方式,找到该DLL ...

  9. C运行时库(C Run-time Library)详解(提供的另一个最重要的功能是为应用程序添加启动函数。Visual C++对控制台程序默认使用单线程的静态链接库,而MFC中的CFile类已暗藏了多线程)

    一.什么是C运行时库 1)C运行时库就是 C run-time library,是 C 而非 C++ 语言世界的概念:取这个名字就是因为你的 C 程序运行时需要这些库中的函数. 2)C 语言是所谓的“ ...

随机推荐

  1. explain 和 desc 详解

    MySQL性能分析 1.使用explain语句去查看分析结果 如explain select * from test1 where id=1;会出现:id  selecttype  table  ty ...

  2. 数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题

    数据导入报错:Got a packet bigger than‘max_allowed_packet’bytes的问题 2个解决方法: 1.临时修改:mysql>set global max_a ...

  3. Unity3D笔记十五 碰撞、移动

    碰撞 Collision. [kəˈliʒən] 碰撞:冲突:(意见,看法)的抵触:(政党等的)倾轧 选择一个需要添加碰撞器的游戏对象后 Component->Physics- Unity一共为 ...

  4. K-means中的K值选择

    关于如何选择Kmeans等聚类算法中的聚类中心个数,主要有以下方法(译自维基): 1. 最简单的方法:K≍sqrt(N/2) 2. 拐点法:把聚类结果的F-test值(类间Variance和全局Var ...

  5. dataframe转换为多维矩阵,然后可以使用values来实现

    import pandas as pd import numpy as np df = pd.DataFrame(np.random.rand(3,3),columns=list('abc'),ind ...

  6. python的十进制与任意进制的转换

    将任意进制转换成十进制 ", 8)) # 表示把8进制的54转换成十进制数并输出结果. # 8可以是2.8,10,16等进制数 将十进制转换成任意进制 def f(n,x): #n为待转换的 ...

  7. OOA/D 01

    建筑师一般不会为一栋100层的楼添加一个新的地下室,因为成本太高无疑会失败,但软件系统里提出类似改动需求时,他们通常都不会多想一下,相反他们会说:这只是一个简单的编程问题 可总会有一些看似极难完成.但 ...

  8. CTP API 开发之二 :制作CTP java版 API

    目前上期技术CTP系统提供的API版本是C++版本 SWIG是一个能将C/C++接口转换为其他语言的工具,目前可以支持Python,Java,R等语言. 本文主要介绍Windows 32/64位平台下 ...

  9. Oracle管理监控之rlwrap-0.37.tar.gz实现sqlplus上下翻页

    1.上传rlwrap-0.37.tar.gz到linux 2.解压rlwrap-0.37.tar.gz [root@node1 mnt]# tar zxvf rlwrap-0.37.tar.gz [r ...

  10. iOS钱包卡券开发(往钱包里面加自己的卡券)

    参考文章 https://blog.csdn.net/sz_vcp2007/article/details/60762349 https://blog.csdn.net/eqera/article/d ...