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

时间:2014-07-10 13:46:04

标签: .net vb.net

我需要将图片框中的图像和文本框中的文本一起复制到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行会导致复制图像。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

数据格式用于检索,具体取决于上下文,即位图将粘贴到Paint中,文本将粘贴到记事本中。

此代码演示您可以在.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中,然后将它们复制。然后检查tResultbResult中的内容(当然评论SetDataObject行)。您会注意到tResult包含您的字符串,但bResult为空。如果您能够确定从Word复制位图时的位图格式,并且在.NET中设置位图时使用该格式,则可以解决此问题。

修改

仅复制Word中的图像会将位图放入bResult,但是当它与其他任何内容一起复制时,Clipboard.GetData(DataFormats.Bitmap)为空。

答案 1 :(得分: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

答案 2 :(得分:-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()