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

问题描述:

我试图同时放入HTML和纯文本的剪贴板中,以便支持HTML的编辑器可以粘贴HTML,而其他编辑器可以使用纯文本。如何将HTML和文本都复制到剪贴板?

Clipboard.SetData(DataFormats.Html, htmlWithHeader); 
Clipboard.SetData(DataFormats.UnicodeText, plainText); 

但只有最后一种格式实际上被放到剪贴板。在上面的示例中,剪贴板将只包含明文(如Clipboard.GetDataObject().GetFormats()所示)。如果我换行,剪贴板将只有HTML格式。

如何将两种格式同时放入剪贴板?

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

您应该使用DataObjectClipboard.SetDataObject()

例子:

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

Clipboard.SetDataObject(dataObj); 
+2

难道不是更好检索什么是'Clipboard'然后创建过的那个,然后添加你的谁的项目你'DataObject'?这样你不会删除现有的'剪贴板'日期? – 2013-04-29 20:05:20

+3

@鲍勃,不!这将创建一个混合franken-clip,它可以有来自不同应用程序的数据。假设你在剪贴板上有RTF,那么你从一个应用程序中添加明文,从另一个应用程序中添加html,然后从另一个应用程序中添加位图。当你粘贴到记事本中时,你会得到明文。当你粘贴到MS Paint中时,你会得到位图。当你粘贴到WinWord时,谁知道?这不是剪贴板应该工作的方式。 – 2013-04-30 15:01:48