繁体   English   中英

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

[英]How do I copy a file to the clipboard and paste it somewhere else?

我有一个带有图像缩略图的列表视图。 每个图像都有一个带有完整路径的标签。

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

然后这个代码被删除:

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

您可以直接使用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)

复制文件到剪贴板时使用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中工作。)

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

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

发现我做错了什么。

起初我用数组中的文件名尝试了它,但是它给出了同样的错误。

现在我有这样的:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM