剪贴板。设置comaprision

时间:2015-05-22 22:52:39

标签: c# wpf

尝试复制到剪贴板时,

之间有什么区别
Clipboard.SetData(DataFormats.Text, "");

Clipboard.SetText("");

4 个答案:

答案 0 :(得分:2)

SetText只是SetData的便捷方法,只有SetText使用UnicodeText versus yours, which is ANSI

From source

    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 codeSetText调用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);
}