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

 

 

 

 

 

 

原创粉丝点击