我正在开发一个需要使用剪贴板数据的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”,这是默认值,而不是剪贴板数据。
答案 0 :(得分: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;
答案 1 :(得分: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();
}
输出:
boo yah! chetan