Невозможно перенести формат HTML в буфер обмена

StackOverflow https://stackoverflow.com/questions/346957

  •  19-08-2019
  •  | 
  •  

Вопрос

Я хочу написать формат Html, но не могу заставить работать даже простой пример MSDN.

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

Подойдет ли кому-нибудь это консольное приложение, работающее с буфером обмена?

using System;
using System.Windows; //Need to add a PresentationCore or System.Windows.Forms reference

class Program {
    [STAThread]
    static void Main( string[] args ) {
        Console.WriteLine( "Copy a small amount of text from a browser, then press enter." );
        Console.ReadLine();

        var text = Clipboard.GetText();
        Console.WriteLine();
        Console.WriteLine( "--->The clipboard as Text:" );
        Console.WriteLine( text );

        Console.WriteLine();
        Console.WriteLine( "--->Rewriting clipboard with the same CF_HTML data." );
        //***Here is the problem code***
        var html = Clipboard.GetText( TextDataFormat.Html );
        Clipboard.Clear();
        Clipboard.SetText( html, TextDataFormat.Html );

        var text2 = Clipboard.GetText();
        Console.WriteLine();
        Console.WriteLine( "--->The clipboard as Text:" );
        Console.WriteLine( text2 );

        var isSameText = ( text == text2 );
        Console.WriteLine();
        Console.WriteLine( isSameText ? "Success" : "Failure" );

        Console.WriteLine();
        Console.WriteLine( "Press enter to exit." );
        Console.ReadLine();
    }
}
Это было полезно?

Решение

Когда вы копируете данные из браузера в буфер обмена, они помещают одни и те же данные в буфер обмена в нескольких форматах, включая текст и HTML. Таким образом, вы можете прочитать данные обратно в текстовом или HTML-формате. Однако, когда вы вызываете SetText здесь, вы ТОЛЬКО передаете в формате HTML, поэтому, когда вы используете обычный GetText, в буфере обмена нет текстовой версии, и вы получаете нулевое значение.

Вы можете поместить в буфер обмена несколько форматов одновременно (т. е. как текст, так и HTML), используя IDataObject, но вы должны выполнить перевод между форматами самостоятельно, прежде чем помещать данные в буфер обмена. Вот пример того, как использовать IDataObject здесь .

Другие советы

Я могу воспроизвести, что это не работает...тот var text2 = Clipboard.GetText(); возвращает "" каждый раз...

(Редактировать) Быстрый поиск доходности этот, что кажется по теме.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top