【发布时间】:2016-01-13 17:17:46
【问题描述】:
我的目标是能够将项目从 ListView 拖动到资源管理器。不过,我试图实现这一点的方式有些不同。通过搜索谷歌和这个网站,我真的找不到任何可以帮助我或与我正在尝试做的事情密切相关的东西。我几乎无法理解其中的一些示例,因为我对这些拖放操作了解不够。
具体来说,我试图从中拖动项目的控件是来自ObjectListView 库的TreeListView。该控件填充了表示类似存档的压缩文件中的结构的节点。条目被解析为代表文件和目录的两个不同对象。这两个模型都继承了一个接口。正常提取这些文件时,我使用Form 实例化它,其中包含节点集合和它们将被提取到的目标路径作为参数。然后它负责提取。这样我就可以显示每个文件的整体和单个进度。
订阅ItemDrag事件,我知道我需要调用DoDragDrop。这样做时,我需要能够仅在拖放到Explorer 之后(当用户释放鼠标时)实例化提取表单,并且还能够检索项目被拖动的路径。
出于某种原因,这似乎比应有的复杂得多。任何形式的意见或建议都会非常有帮助。
【问题讨论】:
-
除非是您的应用,否则您不能强制放置收件人的行为。接收应用程序将按照它希望的任何方式解释下降。
-
不试图强制放置收件人的行为。
-
您不会看到drop,只有接收应用会看到,所以当这种情况发生时您无法弹出表单。只有接收应用才能做到这一点。
-
我明白你在说什么,但我并不是真的想“看到下降”。我只是希望能够将文件提取到一个临时目录,以便 DoDragDrop 方法可以完成它的工作。我虽然也许我可以覆盖 DataObject 中允许我显示对话框以便提取文件的内容,然后 then 给它路径以便它可以处理其余部分。问题是我不知道如何或什至有办法通过显示表单并仅在释放鼠标后提取文件来做到这一点。
-
我知道,我只是希望有一些可能的方法来完成我正在尝试做的事情,不管它是什么。我的意思是,我已经看到 WinRAR 做了我想做的事情。
标签: c# winforms drag-and-drop objectlistview