C#WinForm 文件的拖放到指定控件
来源:互联网 发布:淘宝卖家升蓝钻 编辑:程序博客网 时间:2024/06/01 19:26
一、实现方案
1.首先对拖放到的控件的AllowDrop属性设置为ture。
2.添加控件的DragEnter事件,该事件会在文件被拖放到控件的工作区时触发。
3.在DragEnter事件方法中检查拖放文件的格式,并对拖放文件放置时的效果进行设置(此处设置为DragDropEffects.Link表示将文件链接到控件)。
4.添加控件的DragDrop事件,该事件会在文件放置完成后触发。
5.在DragDrop事件方法中,对文件的路径进行获取。获取时使用GetData方法,指定获取的格式为DataFormats.FileDrop,将返回的object类型的值转换为System.Array。该值的第一个元素即为文件的路径,获取文件路径后就可以完成后续操作了。
二、使用的相关函数
1、DataObject.GetDataPresent 方法
(用于判断获取的文件是否为指定类型或可以转换到指定类型)
重载1:bool GetDataPresent(string format,bool autoConvert);
功能说明:确定该文件是否与指定的格式相同,同时指定是否检查该文件能否转换到指定格式。
参数说明:
format:指定的文件格式。
autoConvert:true检查该文件能否转换到指定格式,false仅检查该文件是否为指定格式。
返回值:如果与指定格式相同或者可以转换到指定格式为true,否则为false。
重载2:bool GetDataPresent(string format);
功能说明:确定该文件是否与指定的格式相同或者该文件能否转换到指定格式。
参数说明:format:指定的文件格式。
返回值:如果与指定格式相同或者可以转换到指定格式为true,否则为false。
重载3:bool GetDataPresent(Type format);
功能说明:确定该文件是否与指定的格式相同或者该文件能否转换到指定格式。
参数说明:format:指定的文件格式。
返回值:如果与指定格式相同或者可以转换到指定格式为true,否则为false。
format所指定的格式参见System.Windows.Forms.DataFormats 以获取预定义的格式。
2、DataObject.GetData方法
(检索与指定格式相关联的数据)
重载1:object GetData(string format,bool autoConvert);
功能说明:检索与指定数据格式相关联的数据,并使用一个布尔值确定是否将数据转换成该格式。
参数说明:
format:指定的文件格式。
autoConvert:true将数据转换至该格式,反之为false。
返回值:与指定格式关联的数据,或为 null。
重载2:object GetData(string format);
功能说明:检索与指定数据格式相关联的数据。
参数说明:format:指定的文件格式。
返回值:与指定格式关联的数据,或为 null。
重载3:object GetData(Type format);
功能说明:检索与指定数据格式相关联的数据。
参数说明:format:指定的文件格式。
返回值:与指定格式关联的数据,或为 null。
format所指定的格式参见System.Windows.Forms.DataFormats 以获取预定义的格式。
三、实现代码
//当某个文件拖入工作区时触发事件
private void panel1_DragEnter(object sender,DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop)) //判断该文件是否可以转换到文件放置格式
{
e.Effect = DragDropEffects.Link; //放置效果为链接放置
}
else
{
e.Effect = DragDropEffects.None; //不接受该数据,无法放置,后续事件也无法触发
}
}
//完成放置后触发
private void panel1_DragDrop(object sender,DragEventArgs e)
{
string path = ((System.Array)e.Data.GetData(DataFormats.FileDrop)).GetValue(0).ToString(); //获取文件路径
}
四、其他说明
在这个实现方案中,DragEnter事件必须要有,否则控件无法接收文件。这里判断文件放置格式的GetDataPresent方法仅是判断了该文件能否作为一个Windows 文件放置格式,Windows 窗体不直接使用此格式。(PS:这个放置方式好像能拖进来所有文件,获得文件路径。。我也没试过。)如果需要指定的文件能够拖放进来,例如图片等,可能需要其他方法,在 System.Windows.Forms.DataFormats中指定的格式并不多。通过Effect属性可以设置文件放置方式,使用Link方式可以用于获得文件路径,None方式无法放置文件。DragDrop这个事件可以不使用,全部写到DragEnter事件方法里也是可以的。
- C#WinForm 文件的拖放到指定控件
- C#Winform无标题窗口的拖放实现
- VB2005文件拖放到控件上
- C#Winform得到指定的文件的位置
- winform中自定义控件拖放到其它控件上,出现NullReferrence异常。
- 将excel文件导入到winform的控件中
- 将excel文件导入到winform的控件中
- HOW TO:从资源管理器中拖放文件到控件
- 文件拖放到CEdit
- 将文件下载到指定途径的OCX控件
- winform 导出数据到指定文件夹 excel格式 但是有重复的文件就报错
- c#winform打开指定目录的方法
- Winform 拖放
- 让你的Winform应用在运行时可自由拖放控件位置
- 让你的Winform应用在运行时可自由拖放控件位置
- 支持文件拖放和实时监控的列表控件CListCtrlEx
- C# 支持拖放的TreeView控件,文件拖拽大全。
- C#文件拖放至窗体的ListView控件获取文件类型
- java 反射机制
- g++编译和链接
- 九、Android XML解析
- WebService到底是什么?
- Java中Integer等包装类型的cache机制
- C#WinForm 文件的拖放到指定控件
- 第六篇 类
- app接口设计之signature签名的php实现
- 1428小鱼比可爱
- JavaSE 集合框架(7)-深入ArrayList
- 安卓学习笔记(一)
- Triangle
- AugularJs API ,ui grid API
- java语言基础(69)——集合框架(泛型的多种应用场景、泛型类、泛型方法、泛型接口)