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

时间:2014-09-15 15:18:41

标签: vb.net clipboarddata

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

使用右键菜单,用户可以单击COPY。

然后此代码被删除:

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。 埃里克

3 个答案:

答案 0 :(得分:4)

您可以直接使用My.Computer.FileSystem.CopyFile

Dim source As String = lvFotos.SelectedItems(0).Tag
Dim destination As String = My.Computer.FileSystem.SpecialDirectories.Desktop & from.Substring(from.LastIndexOf("\"))
My.Computer.FileSystem.CopyFile(source, destination)

答案 1 :(得分:2)

Copying a File To The Clipboard使用John Smith的代码:

Dim f() As String = {"C:\temp\Folder.jpg"}
Dim d As New DataObject(DataFormats.FileDrop, f)
Clipboard.SetDataObject(d, True)

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

请注意,您必须传递一个表示文件名的字符串数组,因此如果您愿意,可以允许用户在粘贴之前收集多个项目。

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

答案 2 :(得分:1)

发现我做错了什么。

起初我曾尝试使用数组中文件的名称,但这也给出了同样的错误。

现在我有这样的话:

 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,它开始起作用。