将图像和文本一起复制到剪贴板

4

我需要将图片框中的图像和文本框中的文本一起复制到Windows剪贴板,以便可以粘贴到Word中。

我正在使用以下代码:

    Dim bmp As New Bitmap(pb1.Width, pb1.Height)
    pb1.DrawToBitmap(bmp, New Rectangle(0, 0, pb1.Width, pb1.Height))

    Dim dataobj As DataObject = New DataObject
    dataobj.SetText("This image is a graph")
    dataobj.SetImage(bmp)
    Clipboard.SetDataObject(dataobj, True)

    bmp.Dispose()

只有文本被复制,但注释掉SetText行会导致图像被复制。 非常感谢您的帮助。


您尝试过使用两个数据对象或数据对象列表吗? - snowYetis
多个对象无法正常工作。你怎么做列表? - dave88
对我来说它很好用... 我可以将文本粘贴到记事本中,将图像粘贴到画图中。你是如何检查图像是否被复制的? - Thomas Levesque
如果您想让文本成为图像的一部分,您需要在图像上绘制它。 - Thomas Levesque
1
例如 - 您在Word文档中有一张图片和一些文本,您选择全部,复制并粘贴到另一个Word文档或类似Wordpad的应用程序中。 图像被保留,文本可编辑。 - dave88
显示剩余6条评论
3个回答

1
数据格式是根据上下文而检索的,例如位图将粘贴到画图中,而文本将粘贴到记事本中。本代码演示了您可以在.NET中指定每种格式来检索它们。
Dim data As New DataObject()
data.SetData(DataFormats.Bitmap, True, Me.pb1.Image)
data.SetData(DataFormats.Text, True, "This image is a graph")
Clipboard.SetDataObject(data, True)
Dim bResult As Bitmap = Clipboard.GetData(DataFormats.Bitmap)
Dim tResult As String = Clipboard.GetData(DataFormats.Text)

作为另一个测试,将图像和文本放入Word中,然后将它们都复制。然后检查最终出现在和中的内容(当然要注释掉行)。您会注意到有您的字符串,但为空。如果您能够弄清楚从Word复制时位图的格式,并在.NET中设置该格式,则可能可以解决此问题。

编辑

仅复制Word中的图像会将位图放入,但是当与其他任何内容一起复制时,为空。


0

以下内容适用于将文本粘贴到Outlook电子邮件中:

        ' Put the image on the Clipboard
        Clipboard.Clear()
        Clipboard.SetImage(image)

        Dim rtb As New RichTextBox
        With rtb
            ' Paste the image into a RichTextBox and add the text
            .Paste()
            .AppendText("Your Text")
            .SelectAll()

            ' Create a DataObject with the RTF and put it on the Clipboard
            Dim dataObj As New DataObject
            dataObj.SetData(DataFormats.Rtf, .SelectedRtf)

            Clipboard.Clear()
            Clipboard.SetDataObject(dataObj)
        End With

-1
尝试直接将位图放入剪贴板中,例如:
Dim bmp As New Bitmap(pb1.Width, pb1.Height)
pb1.DrawToBitmap(bmp, New Rectangle(0, 0, pb1.Width, pb1.Height))

Dim dataobj As DataObject = New DataObject
dataobj.SetText("This image is a graph")

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

bmp.Dispose()

这只复制图像而不包括文本。 - dave88
@ThomasLevesque 对不起,Clipboard.SetDataObject 在添加数据对象之前会清空剪贴板。 - rageit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接