【问题标题】:Copy image and text to clipboard together将图像和文本一起复制到剪贴板
【发布时间】:2014-07-10 13:46:03
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过使用两个数据对象或数据对象列表?
  • 多个对象不起作用。你是怎么做清单的?
  • 它对我来说很好用...我可以将文本粘贴到记事本中,并将图像粘贴到画图中。你是如何检查图像没有被复制的?
  • 它们不会一起粘贴到 word、写字板等中。
  • 例如 - 您在 word 文档中有图像和一些文本,您选择全部、复制并粘贴到另一个 word 文档或其他应用程序(如写字板)中。图像被保留,文本可编辑。

标签: .net vb.net


【解决方案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 中,然后将它们都复制。然后检查tResultbResult 中的内容(当然要注释掉SetDataObject 行)。你会注意到tResult 有你的字符串,但bResult 是空的。如果您能弄清楚从 Word 中复制位图时的格式,并在 .NET 中设置时使用该格式,您也许可以解决它。

编辑

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

【讨论】:

    【解决方案2】:

    这适用于粘贴到 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
    

    【讨论】:

      【解决方案3】:

      尝试将位图直接放入剪贴板,如:

      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()
      

      【讨论】:

      • 这只会复制图像而不是文本。
      • @ThomasLevesque 我的错。 Clipboard.SetDataObject 在添加数据对象之前清除剪贴板。
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多