从Windows窗体拖放到桌面和Windows资源管理器

6
最近我在实现窗体外的拖放功能方面遇到了很大的困难。我在窗体内部和窗体之间以及从桌面到窗体上进行拖放没有问题。我创建了一个应用程序,您可以在其中拖放任何项目。我的问题是,我不知道如何实现我的应用程序的反向操作,即从我的应用程序拖放到桌面或任何窗体外的目的地。如果有任何建议和想法,我将非常感激。谢谢。
我们在这里讨论的是文件和文件夹 :)

1
如果你正在拖拽已经存在的文件,那么HDROP就足够了。如果你想让资源管理器根据用户拖动的内容创建一个新文件,那么可以使用此链接中提供的示例:Creating something from nothing: Developer-friendly virtual file implementation for .NET - Raymond Chen
1
您可以在这里找到一些建议和示例: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/ce2be58a-9b4a-4bae-8759-512e3a47ff85/ - user629926
可能是[拖放到桌面/资源管理器]的重复问题 (https://dev59.com/vHA75IYBdhLWcg3w6Nhj)。 - Hans Passant
1个回答

1

我不知道你正在使用哪个控件;大多数 .net 控件都有一个方法叫做 DoDragDrop。如果适合你的话,请使用这个方法。

private void PopulateListView()
{ 
    string directoryPath=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    String[] files=System.IO.Directory.GetFiles(directoryPath);
    if(files!=null)
    {
        foreach(string file in files)
        {
            listView1.Items.Add(new ListViewItem(file));
        }
    }
}


private void listView1_MouseDown(object sender, MouseEventArgs e)
{
    System.Collections.Specialized.StringCollection filePath = new
    System.Collections.Specialized.StringCollection();
    if (listView1.SelectedItems.Count > 0)
    { 
        filePath.Add(listView1.SelectedItems[0].Text);
        DataObject dataObject = new DataObject();
        dataObject.SetFileDropList(filePath);
        listView1.DoDragDrop(dataObject, DragDropEffects.Copy);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接