设置文本后剪贴板为空

时间:2014-11-24 17:22:51

标签: c# .net

我有以下控制台程序:

using System.Windows.Forms;    

[STAThread]
public static void Main(string[] args)
{
    var text = Clipboard.GetText();
    Console.WriteLine("Input Text: " + text);
    Clipboard.SetText(text, TextDataFormat.Html);
    Console.WriteLine("Output Text: " + Clipboard.GetText());
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

输入/输出如下所示:

Input Text: <table><tr><td>Hello, world!</td></tr></table>
Output Text: 
Exiting...

所需的输入/输出应如下所示:

Input Text: <table><tr><td>Hello, world!</td></tr></table>
Output Text: <table><tr><td>Hello, world!</td></tr></table>
Exiting...

基本上,我想要一个控制台程序将存储为剪贴板中的纯文本的HTML数据转换为实际的HTML数据并将其放回剪贴板中,以便我可以将其直接粘贴到Outlook电子邮件中,它将格式化为表格而不是的文字。但我不明白为什么Clipboard.SetText()调用消隐了剪贴板而不是将文本放在具有正确数据类型的剪贴板中。如何更改程序以达到所需的输出?

2 个答案:

答案 0 :(得分:2)

使用GetText的other overload,因为您指定了TextDataFormat

Clipboard.GetText(TextDataFormat.Html))

答案 1 :(得分:0)

知道了。显然,即使Outlook使用HTML格式的邮件格式,您也不能只将HTML粘贴到其中并将其呈现为表格。相反,您必须将纯文本转换为RTF格式,然后将其粘贴到Outlook中。显然,在.NET中将HTML转换为RTF并没有很好的解决方案,您必须使用Windows窗体库中的WebBrowser控件和RichTextBox。这是代码:

[STAThread]
public static void Main(string[] args)
{
    //string input = "<table><tr><td>Hello, world!</td></tr></table>";
    string input = Clipboard.GetText();
    ConvertToRTF(input);
    string text = Clipboard.GetText(TextDataFormat.Rtf);
    Clipboard.SetText(text,TextDataFormat.Rtf);
}

public static void ConvertToRTF(string html)
{
    RichTextBox rtbTemp = new RichTextBox();
    WebBrowser wb = new WebBrowser();
    wb.Navigate("about:blank");
    wb.Document.Write(html);
    wb.Document.ExecCommand("SelectAll", false, null);
    wb.Document.ExecCommand("Copy", false, null);
    rtbTemp.SelectAll();
    rtbTemp.Paste();
    rtbTemp.Copy();
}