2011-11-22 107 views
5

最近我一直很难在窗体外实现拖放功能。在windows窗体之间和窗体之间以及从桌面到窗体的拖放操作都没有问题。我创建了一个应用程序,您可以在其上拖放任何项目。我的问题是,我不知道如何实现我的应用程序的反转,从我的应用程序拖放到桌面或窗体外的任何目标。任何建议和想法,我会感激地接受。谢谢。从窗体拖放到桌面和Windows资源管理器

我们正在谈论的文件和文件夹的位置确定:)

+1

如果您正在拖动已存在的文件,那么您只需使用HDROP。如果您希望资源管理器基于用户拖动的内容创建一个新文件,那么您可以使用[从空白创建东西:用于.NET的开发人员友好的虚拟文件实现]上的示例(http://blogs.msdn.com/ b /延迟/存档/ 2009/10月26日/创建-东西 - 从 - 无 - 开发者友好的虚拟文件的实现换net.aspx)。 –

+1

你在这里找到一些建议和示例 http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/ce2be58a-9b4a-4bae-8759-512e3a47ff85/ – user629926

+0

可能的重复[Drag and drop to桌面/资源管理器](http://stackoverflow.com/questions/3040415/drag-and-drop-to-desktop-explorer) –

回答

0

我不知道它控制你正在使用;大多数.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); 
    } 
} 
+0

它不适用于文件夹。 – Argnist

相关问题