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

时间:2008-11-12 19:27:43

标签: c# .net clipboard copy-paste

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

这就是我将两者作为单独的操作(当然只有相关的代码行,try / catch被剥离等)的方式。:

将图像添加到剪贴板:

...

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

...

将文字添加到剪贴板:

...

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

Clipboard.SetText(text);

...

我正在使用c#和.net 2.0框架并针对Windows XP(可能在不久的将来推出Vista)。

TIA

4 个答案:

答案 0 :(得分:4)

您可以使用RTF,它可以组合文本和图形。请注意,您可以同时在剪贴板上安装CF_BITMAP和CF_TEXT。但它没用。当您粘贴到记事本中时,您会得到文本,当您粘贴到Paint时,您会得到位图,而大多数其他应用程序会选择其中一个,但绝不会同时选择两个。所以它只是学术性的。有点整洁,就像星际迷航中的运输车故障一样整洁。但也很乱。

答案 1 :(得分:1)

也许您可以使用需要Object参数的SetDataObject,您可以使用对象数组吗?

对象数组可以保存您需要的数据。

请看这个链接:

http://msdn.microsoft.com/en-us/library/5b8kt5z4.aspx

答案 2 :(得分:1)

我注意到只能传入一个对象。

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

所以,看看循环或递归。

答案 3 :(得分:0)

添加特定的代码实现;

// 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);