我正在尝试将文件中的图像和文件中的文件复制到剪贴板。我的意图是打开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
答案 0 :(得分:4)
您可以使用RTF,它可以组合文本和图形。请注意,您可以同时在剪贴板上安装CF_BITMAP和CF_TEXT。但它没用。当您粘贴到记事本中时,您会得到文本,当您粘贴到Paint时,您会得到位图,而大多数其他应用程序会选择其中一个,但绝不会同时选择两个。所以它只是学术性的。有点整洁,就像星际迷航中的运输车故障一样整洁。但也很乱。
答案 1 :(得分:1)
也许您可以使用需要Object参数的SetDataObject,您可以使用对象数组吗?
对象数组可以保存您需要的数据。
请看这个链接:
答案 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);