【发布时间】:2010-06-30 14:16:19
【问题描述】:
我正在尝试实现类似于 winzip/winrar 等的功能。我有一个 Treeview,它显示了一个包 (System.IO.Packaging) 的内容。我希望能够将文件或文件夹从TreeView 拖放到资源管理器窗口或桌面等。我的问题是我必须先调用DoDragDrop,然后才能知道对象是否真的被丢弃了。这意味着要使用FileDrop 类型创建DataObject,我必须将包的这些内容提取到一个临时区域,然后在调用DoDragDrop 之前将该路径提供给DataObject。如果用户没有放置在有能力的容器上或取消放置,那么提取这些内容的开销就被浪费了。我注意到在有效目标上发生删除之前,winzip 实际上不会创建临时文件。我检查了 WinZip drop 提供的 DataFormats,它们是普通的 FileDrop、FileNameW、FileName 和 Shell IDList Array。前三个只是将一个字符串保存到 winzip 将该文件提取到的临时位置。我不确定最后一个是做什么的。
长话短说,在我知道放置位置有效之前,我希望能够避免提取内容。是否有回调来确定放置位置?任何建议都会非常有帮助。
System.Windows.DragDropEffects de = DragDrop.DoDragDrop(treeview1, dataObj, System.Windows.DragDropEffects.Move);
【问题讨论】:
标签: c# drag-and-drop