将文本和应用程序特定的数据复制到剪贴板

时间:2019-02-24 15:18:43

标签: c# clipboard

对于我当前正在从事的项目,必须在一定程度上使用剪贴板。

我需要什么:

  

将文本和一些其他特定于应用程序的数据保存到剪贴板。文本应该可以在其他应用程序中与CTRL + V一起使用,而通常应省略应用程序数据,因为它主要用于引用内容(如引号等)

我尝试过的事情:

  

将自定义对象复制到剪贴板并覆盖ToString-Method,认为它可以工作还有些天真

[Serializable]
public class TestData {
    public string txt;
    public string additionalStuffs;

    public override string ToString() {
        return txt;
    }
}
Clipboard.SetData( "TestData", new TestData() { txt = "This is a text", additionalStuffs = "Stuffs" } );

我现在需要将txt作为字符串粘贴到其他应用程序中,而忽略其他数据,除非将其发布到我的应用程序中。为了便于用户阅读和使用。

你们中的任何人都可以解释我如何解决这个问题吗?甚至有办法做到吗?

1 个答案:

答案 0 :(得分:2)

好的,使用文档进行了更多的反复试验,我实际上找到了解决方案。

对于每个有相同问题的人:诀窍是使用如下所示的DataObject:

[Serializable]
public class TestData {
   public string Whatever;
}

IDataObject dataObject = new DataObject();
dataObject.SetData( "System.String", "Test" );
dataObject.SetData( "Text", "Test" );
dataObject.SetData( "UnicodeText", "Test" );
dataObject.SetData( "OEMText", "Test" );

dataObject.SetData( "TestData", new TestData() { Whatever = "NONONONONO", } );

Clipboard.SetDataObject( dataObject );

使用此构造,您可以使用多个“ DataTypes”设置文本,因此无论您要粘贴到哪个应用程序,都需要提供一个值。这样,粘贴时仅显示文本,而隐藏在内部也是附加数据。

很抱歉,没有研究到最后就提出这个问题。祝你有美好的一天!