Я пытаюсь вставить в буфер обмена фрагмент HTML и простой текст одновременно, чтобы редакторы с поддержкой HTML могли вставлять HTML, а другие редакторы могли использовать простой текст.

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

Но фактически в буфер обмена помещается только последний формат. В приведенном выше примере буфер обмена будет содержать только открытый текст (как показано Clipboard.GetDataObject().GetFormats()). И если я поменяю строки местами, в буфере обмена будет только формат HTML.

Как я могу одновременно поместить в буфер обмена оба формата?

10
alex 29 Апр 2013 в 23:45

1 ответ

Лучший ответ

Вы НЕ можете использовать Clipboard.SetData для установки как HTML, так и обычного текста. Второй вызов SetData очистит содержимое буфера обмена, которое было установлено первым вызовом, и сохранит новые данные.

Вам следует использовать DataObject и Clipboard.SetDataObject ().

Примере:

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

Clipboard.SetDataObject(dataObj);
18
Peter Mortensen 19 Ноя 2016 в 18:31
2
Не лучше было бы получить то, что было в Clipboard, затем создать свой DataObject из этого, а затем добавить свои элементы who? Таким образом, вы не удалите существующую дату Clipboard?
 – 
Bob.
30 Апр 2013 в 00:05
4
@ Боб, НЕТ! Это создало бы гибридный клип-клип, который мог бы содержать данные из разных приложений. Предположим, у вас есть RTF в буфере обмена, затем вы добавляете открытый текст из одного приложения, HTML из другого приложения, а затем растровое изображение из еще одного приложения. Когда вы вставляете в Блокнот, вы получаете открытый текст. Когда вы вставляете в MS Paint, вы получаете растровое изображение. Когда вставляешь в WinWord, кто знает? Буфер обмена должен работать не так.
 – 
Chris Thornton
30 Апр 2013 в 19:01