代码之家  ›  专栏  ›  技术社区  ›  Jason Down

如何将图像和文本作为一个对象复制到剪贴板?

  •  5
  • Jason Down  · 技术社区  · 16 年前

    我正在尝试将文件中的图像和文件中的文本复制到剪贴板。我的目的是打开word文档或outlook电子邮件,并在一个标准的粘贴命令(例如CTRL-V)中粘贴文本和图像。我可以很容易地分别做这两件事,但在一个操作中同时做这两件事似乎不起作用。

    将图像添加到剪贴板:

    Bitmap imageToAdd = new Bitmap(imageFilePath);
    Clipboard.SetImage(imageToAdd);
    

    ...

    将文本添加到剪贴板:

    ...

    StreamReader rdr = new StreamReader(textFilePath);
    string text = rdr.ReadToEnd();
    
    Clipboard.SetText(text);
    

    ...

    我正在使用c#和.NET2.0框架,目标是WindowsXP(很可能在不久的将来是Vista)。

    3 回复  |  直到 16 年前
        1
  •  5
  •   Chris Thornton    14 年前

    您可以使用RTF,它可以结合文本和图形。请注意,您可以在剪贴板上同时显示CF_位图和CF_文本。但这没用。当你粘贴到记事本上时,你会得到文本,当你粘贴到画图上时,你会得到位图,大多数其他应用程序会选择其中一个,但决不会同时选择两者。所以这仅仅是学术性的。有点整洁,就像《星际迷航》中的那种整洁。但也很混乱。

        2
  •  1
  •   GurdeepS    16 年前
        3
  •  1
  •   GurdeepS    16 年前

    我注意到只有一个物体可以通过。

    在这种情况下,当用户按下粘贴命令时,您的代码可以递归地执行两个函数或一个函数,每次都可以获取所需的数据并将其粘贴到中。

    那么,看看循环或递归。

        4
  •  0
  •   Markus    4 年前

    增加具体的代码实现;

    // Load a bitmap without locking it.
    private Bitmap LoadBitmapUnlocked(string path)
    {
        using (Bitmap bm = new Bitmap(path))
        {
            return new Bitmap(bm);
        }
    }
    

    ...

    string path = 
    @"C:\Windows\Web\Wallpaper\Architecture\img13.jpg"; 
    DataObject dataObj = new DataObject();
    dataObj.SetData(DataFormats.Bitmap, true, LoadBitmapUnlocked(path));
    dataObj.SetData(DataFormats.UnicodeText, path);
    Clipboard.SetDataObject(dataObj);