欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

让您的WinForm控件快速支持拖拽文件

程序员文章站 2022-07-11 08:18:01
实现原理:使用扩展方法。 使用方法:在窗体的load事件或构造方法中: 扩展方法是.net提供的一个语法糖,使用它可以很方便的封装一些通用功能。 ......

实现原理:使用扩展方法。

    /// <summary>
    /// 控件扩展
    /// </summary>
    public static class controlext
    {
        /// <summary>
        /// 文件拖拽支持
        /// </summary>
        /// <param name="control"></param>
        /// <param name="filenamescallback">拖拽的文件路径列表</param>
        public static void controlusedrop(this control control,action<list<string>> filenamescallback)
        {
            control.allowdrop = true;//设置控件运行拖放
            control.dragenter += control_dragenter;
            control.dragdrop += (sender,e)=> {
                array array = e.data.getdata(dataformats.filedrop) as array;
                list<string> filenames = new list<string>();
                foreach (object item in array)
                {
                    filenames.add(item.tostring());
                }
                filenamescallback?.invoke(filenames);
            };
        }private static void control_dragenter(object sender, drageventargs e)
        {
            if (e.data.getdatapresent(dataformats.filedrop))
            {
                e.effect = dragdropeffects.link;
            }
            else
            {
                e.effect = dragdropeffects.none;
            }
        }
    }

使用方法:在窗体的load事件或构造方法中:

  this.txt_selectfiles.controlusedrop(files => {
                filenames=files.where(f => f.endswith(".sql")).tolist();
                this.txt_selectfiles.text = string.join("\r\n", filenames);
            });

扩展方法是.net提供的一个语法糖,使用它可以很方便的封装一些通用功能。