我正在尝试将文件中的图像和文本文件中的内容复制到剪贴板。我的意图是然后打开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
我注意到只能传递一个对象。
在这种情况下,当用户按下命令进行粘贴时,您的代码可以递归执行两个功能或一个功能,并且每次获取所需的数据并将其粘贴。
所以,请看循环或递归。
您可以使用RTF,它可以将文本和图形结合在一起。请注意,您可以同时在剪贴板上具有CF_BITMAP和CF_TEXT。但这没有用。粘贴到记事本中时会得到文本,粘贴到Paint中时会得到位图,大多数其他应用程序会选择一个或另一个,但不会两者都选。所以这仅仅是学术上的。有点整齐,就像《星际迷航》上的运输工具故障一样整齐。但也凌乱。
也许您可以使用需要Object参数的SetDataObject,也可以使用对象数组?
对象数组可以保存您所需的数据。
查看此链接:
添加特定的代码实现;
// 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);