Vb.net 如何将文件复制到剪贴板并粘贴到其他位置?

Vb.net 如何将文件复制到剪贴板并粘贴到其他位置?,vb.net,clipboarddata,Vb.net,Clipboarddata,我有一个带有图像缩略图的列表视图。 每个图像都有一个标记,其中包含其完整路径 使用右键单击菜单,用户可以单击复制 那么这个代码就不适用了: Dim selectedfile As String selectedfile = Me.lvFotos.SelectedItems(0).Tag Dim dataobj As New DataObject(DataFormats.FileDrop, selectedfile) Clipboard.Clear() Clipboard.SetDataO

我有一个带有图像缩略图的列表视图。 每个图像都有一个标记,其中包含其完整路径

使用右键单击菜单,用户可以单击复制

那么这个代码就不适用了:

Dim selectedfile As String

selectedfile = Me.lvFotos.SelectedItems(0).Tag


Dim dataobj As New DataObject(DataFormats.FileDrop, selectedfile)

Clipboard.Clear()
Clipboard.SetDataObject(dataobj)
现在,当我单击桌面粘贴文件时,VS2010中出现异常错误:

System.Windows.Forms.dll中发生类型为“System.Runtime.InteropServices.COMException”的异常,在托管/本机边界之前未处理该异常

其他信息:FORMATETC结构无效(HRESULT:0x80040064(DV_E_FORMATETC)的异常)

我做错了什么

rg。 Eric可以直接使用


使用John Smith提供的代码:

(在Windows 7 x64上测试为在VS2013中工作。)

请注意,您必须传递一个表示文件名的字符串数组,以便用户可以在粘贴前收集多个项目(如果需要)


剪贴板中的
true
。SetDataObject
允许在退出程序时数据保留在剪贴板上,因此如果用户选择一个文件并在粘贴之前退出,他们不会丢失选择。

发现我做错了什么

起初,我用数组中的文件名进行了尝试,但这会产生相同的错误

现在我有这样一个:

 Dim selectedfile(0) As String

selectedfile(0) = Me.lvFotos.SelectedItems(0).Tag

Dim dataobj As New DataObject

dataobj.SetData(DataFormats.FileDrop, True, selectedfile)

Clipboard.Clear()
Clipboard.SetDataObject(dataobj, True)
差异与SETDATA一致。
通过在SetData和SetDataObject中将第二个参数设置为TRUE,它开始工作。

Clipboard.SetText(lvFotos.SelectedItems(0.Tag.ToString)
我不确定您对该代码的其余部分做了什么……如果您有该文件的名称,请使用它。当我事先不知道目的地时,该如何工作?
Dim f() As String = {"C:\temp\Folder.jpg"}
Dim d As New DataObject(DataFormats.FileDrop, f)
Clipboard.SetDataObject(d, True)
 Dim selectedfile(0) As String

selectedfile(0) = Me.lvFotos.SelectedItems(0).Tag

Dim dataobj As New DataObject

dataobj.SetData(DataFormats.FileDrop, True, selectedfile)

Clipboard.Clear()
Clipboard.SetDataObject(dataobj, True)