尝试复制到剪贴板时,
之间有什么区别Clipboard.SetData(DataFormats.Text, "");
和
Clipboard.SetText("");
答案 0 :(得分:2)
SetText
只是SetData
的便捷方法,只有SetText
使用UnicodeText
versus yours, which is ANSI
public static void SetText(string text)
{
....
SetText(text, TextDataFormat.UnicodeText); //<------------
}
public static void SetText(string text, TextDataFormat format)
{
....
SetDataInternal(DataFormats.ConvertToDataFormats(format), text);
}
public static void SetData(string format, object data)
{
....
SetDataInternal(format, data);
}
所以,两者都使用SetDataInternal
答案 1 :(得分:2)
您使用的格式Text
未指定它是Unicode。 As we can see in the source code,SetText
调用SetDataInternal(DataFormats.UnicodeText, data)
,而您的第二个示例则调用SetDataInternal(DataFormats.Text, data
。)
DataFormats.Text
指定ANSI编码。它基本上意味着特定字符被某些?
或类似字符取代。在其他问题/答案中阅读有关此格式的更多信息:What is ANSI format?
答案 2 :(得分:1)
文档说明了Clipboard.SetText()
的作用:
在剪贴板上存储UnicodeText数据。
这表明Clipboard.SetText("")
相当于Clipboard.SetData(DataFormats.UnicodeText, "");
因此,为了回答您的问题,Clipboard.SetText("")
将空 unicode 文本字符串放入剪贴板,而Clipboard.SetData(DataFormats.Text, "");
则存储空 ANSI 文字字符串。
答案 3 :(得分:0)
设置Text和Text of Text之间的区别确实没有。 例如,在设置剪贴板时,您可以将剪贴板设置为文件夹,以便用户可以复制和粘贴文件或文本。因此,需要设置剪贴板的数据类型,但如果使用预设函数SetText,则创建它是为了节省程序员时间而不必这样做。
此代码Clipboard.SetData(DataFormats.Text, "");
与Clipboard.SetText("");
相同,除了函数SetText(String text)
内部它将为您设置数据格式,SetText内部的代码(反编译后)
public static void SetText(string text, TextDataFormat format)
{
if (string.IsNullOrEmpty(text))
{
throw new ArgumentNullException("text");
}
if (!System.Windows.Forms.ClientUtils.IsEnumValid(format, (int) format, 0, 4))
{
throw new InvalidEnumArgumentException("format", (int) format, typeof(TextDataFormat));
}
System.Windows.Forms.IDataObject data = new DataObject();
data.SetData(ConvertToDataFormats(format), false, text);
SetDataObject(data, true);
}