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

问题描述 投票:5回答:4

我正在尝试将文件中的图像和文本文件中的内容复制到剪贴板。我的意图是然后打开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

c# .net clipboard copy-paste
4个回答
1
投票

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

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

所以,请看循环或递归。


5
投票

您可以使用RTF,它可以将文本和图形结合在一起。请注意,您可以同时在剪贴板上具有CF_BITMAP和CF_TEXT。但这没有用。粘贴到记事本中时会得到文本,粘贴到Paint中时会得到位图,大多数其他应用程序会选择一个或另一个,但不会两者都选。所以这仅仅是学术上的。有点整齐,就像《星际迷航》上的运输工具故障一样整齐。但也凌乱。


1
投票

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

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

查看此链接:

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


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);
© www.soinside.com 2019 - 2024. All rights reserved.