从ListView拖放到资源管理器

时间:2016-01-13 17:17:46

标签: c# winforms drag-and-drop objectlistview

我的目标是能够将项目从ListView拖动到资源管理器。我试图实现这一点的方式有些不同。通过搜索谷歌和这个网站,我找不到任何可以帮助我或与我正在尝试做的事情密切相关的事情。我几乎无法理解一些例子,因为我对这些拖放操作不够了解。

具体来说,我正在尝试拖动项目的控件是来自TreeListView库的ObjectListView。控件填充有表示类似存档的压缩文件内的结构的节点。条目被解析为表示文件和目录的两个不同对象。这两个模型都继承了一个接口。在正常提取这些文件时,我使用Form来实例化一组节点,并将它们作为参数提取到目标路径。然后它负责提取。这样我就可以显示每个文件的整体和单一进度。

订阅ItemDrag活动,我知道我需要致电DoDragDrop。执行此操作时,我需要能够在删除(当用户释放鼠标时)到Explorer之后实例化提取表单,并且还能够检索拖动项目的路径。

出于某种原因,这似乎比它应该复杂得多。任何形式的建议或建议都会非常有帮助。

1 个答案:

答案 0 :(得分:0)

我不确定资源管理器在拖动对象中期望的格式,但此过程可能适合您。

  • 开始拖动时,将所选文件预先解压缩到某个临时值 目录
  • 构建一个DataObject,其中包含以Explorer预期格式提取的文件的路径
  • 在DoDragDrop调用中使用DataObject
  • 当用户放入资源管理器时,文件应该从临时目录复制到放置目标
  • 跟踪所有提取的文件并在应用程序存在时进行清理(需要ID)

希望这有帮助。

编辑(经过一些研究):

我相信如果你使用

new DataObject(DataFormats.FileDrop, files)

其中files是要复制的文件名的字符串[](放在temp目录中的文件名),你需要有正确的DataObject来实现。

Haven还没有机会编写原型进行测试。祝你好运!