在 C# 中比较两个剪贴板 IDataObject

Compare two Clipboard IDataObject in C#

我正在使用 Clipboard events 将数据从剪贴板复制到我的应用程序,其中包括 Microsoft Word。

只要用户在 windows 中的任何地方点击复制,它就会将数据粘贴到单词中。但是如果用户点击 Ctrl + C 两次,我不想粘贴相同的数据。 现在 this answer 建议,我不能使用 IsCurrent 来比较 DataObjects

所以我是这样做的:

if (Clipboard.GetData(DataFormats.UnicodeText).ToString()!=oldData)
  {
     //Paste and stuffs
     oldData= Clipboard.GetData(DataFormats.UnicodeText).ToString();
  }

但它仅在数据包含一些文本时有效,如果不包含文本,我将收到空引用错误。 那么有什么方法可以知道 DataObject 是否包含除文本以外的其他内容(比如 Bitmap)并能够比较它们?

您可以使用方法 ContainsData 来检查对象类型是否存在

  if (Clipboard.ContainsData(System.Windows.Forms.DataFormats.Text))
        {
            //do something
        }

您可以探索 DataFormats class 以找到适合您需要的格式