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

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

    /// <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提供的一个语法糖,使用它可以很方便的封装一些通用功能。

posted on 2019-05-14 09:43  浅浅鸿儒  阅读(665)  评论(2编辑  收藏  举报

导航