1

我正在开发一个需要使用剪贴板数据的 Windows 应用程序。我正在尝试通过下面的代码从剪贴板复制文本。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace MultiValuedClipBoard
{
    class Class1
    {

        public String SwapClipboardHtmlText(String replacementHtmlText)
        {
            String returnHtmlText = "hello";
            if (Clipboard.ContainsText(TextDataFormat.Html))
            {
                returnHtmlText = Clipboard.GetText(TextDataFormat.Html);
                Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);
            }
            return returnHtmlText;
        }
    }
}

通过以下方式调用上述函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;

namespace MultiValuedClipBoard
{
    class Program
    {
        static void Main(string[] args)
        {
            Class1 aas = new Class1();
            string a = aas.SwapClipboardHtmlText("chetan");
            Console.WriteLine(a);
            Console.ReadLine();
        }
    }
}

运行此代码时,它会输出默认值“Hello”,而不是剪贴板数据。

4

2 回答 2

2

由于两个原因,您的代码将无法正常工作:

[1] 当你说:

if (Clipboard.ContainsText(TextDataFormat.Html))

在这里,您基本上假设剪贴板已经包含一个文本并且也是 HTML 格式的,但是根据您在剪贴板中设置的值,它看起来不像您打算在您的任何地方使用预先存在的剪贴板值程序。所以,这个 if 条件不应该存在。

[2] 其次,您进一步尝试将字符串“chetan”设置为绝对不是 HTML 格式的剪贴板。所以,

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Html);

变成

            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);

因此,实际上,您的新代码变成了这样:

        String returnHtmlText = "hello";
        //if (Clipboard.ContainsText(TextDataFormat.Html))
        //{
            returnHtmlText = Clipboard.GetText(TextDataFormat.Text);
            Clipboard.SetText(replacementHtmlText, TextDataFormat.Text);
        //}
        return returnHtmlText;
于 2013-03-02T07:48:18.610 回答
1

显然Clipboard.ContainsText(TextDataFormat.Html)评估为false。这意味着剪贴板实际上不包含您指定格式的文本。

我改变了你的程序来证明这一点:

[STAThread]
static void Main(string[] args)
{
    Clipboard.SetText("boo yah!", TextDataFormat.Html);
    Class1 aas = new Class1();
    string a = aas.SwapClipboardHtmlText("chetan");
    Console.WriteLine(a);
    Console.WriteLine(Clipboard.GetText(TextDataFormat.Html));
    Console.ReadLine();
}

输出:

嘘!
车坦
于 2013-03-02T09:05:27.750 回答