【问题标题】:Drag and Drop from ListView to Explorer [duplicate]从 ListView 拖放到资源管理器 [重复]
【发布时间】:2016-01-13 17:17:46
【问题描述】:

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

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

订阅ItemDrag事件,我知道我需要调用DoDragDrop。这样做时,我需要能够仅在拖放到Explorer 之后(当用户释放鼠标时)实例化提取表单,并且还能够检索项目被拖动的路径。

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

【问题讨论】:

  • 除非是您的应用,否则您不能强制放置收件人的行为。接收应用程序将按照它希望的任何方式解释下降。
  • 不试图强制放置收件人的行为。
  • 您不会看到drop,只有接收应用会看到,所以当这种情况发生时您无法弹出表单。只有接收应用才能做到这一点。
  • 我明白你在说什么,但我并不是真的想“看到下降”。我只是希望能够将文件提取到一个临时目录,以便 DoDragDrop 方法可以完成它的工作。我虽然也许我可以覆盖 DataObject 中允许我显示对话框以便提取文件的内容,然后 then 给它路径以便它可以处理其余部分。问题是我不知道如何或什至有办法通过显示表单并仅在释放鼠标后提取文件来做到这一点。
  • 我知道,我只是希望有一些可能的方法来完成我正在尝试做的事情,不管它是什么。我的意思是,我已经看到 WinRAR 做了我想做的事情。

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


【解决方案1】:

我不确定 Explorer 期望拖动对象的格式是什么,但这个过程可能适合您。

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

希望这会有所帮助。

编辑(经过一些研究):

我相信如果你使用

new DataObject(DataFormats.FileDrop, files)

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多