如何同时将HTML和文本复制到剪贴板?

11

我想同时将HTML和纯文本复制到剪贴板中,这样支持HTML的编辑器就可以粘贴HTML,而其他编辑器则可以使用纯文本。

Clipboard.SetData(DataFormats.Html, htmlWithHeader);
Clipboard.SetData(DataFormats.UnicodeText, plainText);
但实际上只有最后一个格式被复制到剪贴板。在上面的示例中,剪贴板只包含纯文本(如 Clipboard.GetDataObject().GetFormats() 所示)。如果我交换这两行,那么剪贴板将只有 HTML 格式。 如何同时将这两种格式放入剪贴板?
1个回答

19

您不能使用Clipboard.SetData同时设置HTML和纯文本。第二次调用SetData将清除先前通过第一次调用设置的剪贴板内容,并存储新的数据。

您应该使用DataObjectClipboard.SetDataObject()

示例:

DataObject dataObj = new DataObject();
dataObj.SetData(DataFormats.Html, htmlWithHeader);
dataObj.SetData(DataFormats.Text, plainText);

Clipboard.SetDataObject(dataObj);

2
剪贴板检索到的内容,创建您的DataObject,然后添加所有项目,这样不是更好吗?这样就不会删除现有的Clipboard数据了。 - Bob.
4
@Bob,不!那样会创建一个混合的怪胎剪贴板,其中可能包含来自不同应用程序的数据。假设你在剪贴板上有RTF格式的内容,然后你从一个应用程序中添加纯文本,从另一个应用程序中添加HTML,再从另一个应用程序中添加位图。当你粘贴到记事本时,你会得到纯文本。当你粘贴到MS Paint时,你会得到位图。当你粘贴到WinWord时,谁知道呢?这不是剪贴板应该工作的方式。 - Chris Thornton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接