• 本站域名:OceanCoder.cn 若您喜欢本站,请添加至收藏夹!
  • 网站少部分资源来源自网络,如有侵犯您的权益,请联系站长删除!
  • 本站所有文章,除特殊标明外,皆为本人原创,转载请注明出处,谢谢合作!
  • 本站所下载的资源,若无特殊说明,使用统一解压密码:oceancoder.cn
  • 本站已实现布局自适应,支持手机端、pad端访问,欢迎体验
  • 本站部分资源可通过微信公众号留言获取,欢迎体验

[C#]文件或文件夹拖拽功能的实现

C# OceanCoder 2017-07-25 4459 次浏览 0个评论

一、前提

将控件的AllowDrog属性设置为True;

为该控件添加事件DragDrop和DragEnter两个事件;

二、使用范例

private void Form_DragEnter(object sender, DragEventArgs e)
{
    dragEnter(e);
}
private void Form_DragDrop(object sender, DragEventArgs e)
{
    TextBox textBox = sender as TextBox;
    textBox.Text = dragDrop(e);
}
/// <summary>
/// 文件拖进事件处理:
/// </summary>
public void dragEnter(DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))    //判断拖来的是否是文件
        e.Effect = DragDropEffects.Link;                //是则将拖动源中的数据连接到控件
    else e.Effect = DragDropEffects.None;
}
/// <summary>
/// 文件放下事件处理:
/// 放下, 另外需设置对应控件的 AllowDrop = true; 
/// 获取的文件名形如 "d:\1.txt;d:\2.txt"
/// </summary>
public string dragDrop(DragEventArgs e)
{
    StringBuilder filesName = new StringBuilder("");
    Array file = (System.Array)e.Data.GetData(DataFormats.FileDrop);//将拖来的数据转化为数组存储
    foreach (object I in file)
    {
        string str = I.ToString();
        System.IO.FileInfo info = new System.IO.FileInfo(str);
        //若为目录,则获取目录下所有子文件名
        if ((info.Attributes & System.IO.FileAttributes.Directory) != 0)
        {
            str = getAllFiles(str);
            if (!str.Equals("")) filesName.Append((filesName.Length == 0 ? "" : ";") + str);
        }
        //若为文件,则获取文件名
        else if (System.IO.File.Exists(str))
            filesName.Append((filesName.Length == 0 ? "" : ";") + str);
    }
    return filesName.ToString();
}
/// <summary>
/// 判断path是否为目录
/// </summary>
public bool IsDirectory(String path)
{
    System.IO.FileInfo info = new System.IO.FileInfo(path);
    return (info.Attributes & System.IO.FileAttributes.Directory) != 0;
}
/// <summary>
/// 获取目录path下所有子文件名
/// </summary>
public string getAllFiles(String path)
{
    StringBuilder str = new StringBuilder("");
    if (System.IO.Directory.Exists(path))
    {
        //所有子文件名
        string[] files = System.IO.Directory.GetFiles(path);
        foreach (string file in files)
            str.Append((str.Length == 0 ? "" : ";") + file);
        //所有子目录名
        string[] Dirs = System.IO.Directory.GetDirectories(path);
        foreach (string dir in Dirs)
        {
            string tmp = getAllFiles(dir);  //子目录下所有子文件名
            if (!tmp.Equals("")) str.Append((str.Length == 0 ? "" : ";") + tmp);
        }
    }
    return str.ToString();
}


已有 4459 位网友参与,快来吐槽:

发表评论