C#WinForm 文件的拖放到指定控件

11 篇文章 1 订阅
2 篇文章 0 订阅

一、实现方案

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事件方法里也是可以的。

 

 

 

 

 

 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值