剪贴板复制对象和从中复制对象

我试图将一个对象复制到Windows剪贴板上然后再关闭。 我的代码是这样的:

复制到剪贴板:

Clipboard.Clear(); DataObject newObject = new DataObject(prompts); newObject.SetData(myString); Clipboard.SetDataObject(newObject); 

promptsList集合。

复制剪贴板:

 IDataObject dataObject = System.Windows.Forms.Clipboard.GetDataObject(); if (dataObject.GetDataPresent(typeof(List))) { Type type = typeof(List); Object obj = dataObject.GetData(type); return (List)dataObject.GetData(type); } 

GetFormats()将格式显示在列表中, GetDataPresent(List)返回true,但是如果我尝试使用GetData(List)将对象从Clipboard类中GetData(List)我得到一个null的返回。

有谁知道什么可能是错的?

好的我尝试将我的用户类型列表添加到剪贴板并将其取回…这是我尝试过的:

我的用户类:

 public class User { public int Age { get; set; } public string Name { get; set; } } 

其余代码:

 // Create User list and add some users List users = new List(); users.Add(new User { age = 15, name = "Peter" }); users.Add(new User { age = 14, name = "John" }); // Lets say its my data format string format = "MyUserList"; Clipboard.Clear(); // Set data to clipboard Clipboard.SetData(format, users); // Get data from clipboard List result = null; if (Clipboard.ContainsData(format)) result = (List)Clipboard.GetData(format); 

…结果为null 🙂 …直到我将User class标记为Serializable

 [Serializable] public class User { //... } 

之后我的代码工作了。 好吧,这不是答案,但也许它可以帮助你如何。

@Reniuz谢谢你的帮助,它帮助我找到答案。

为了从多个格式的剪贴板中获取文本和自定义对象数据,我在自己的类中实现了IDataObject接口。 设置数据对象的代码必须具有如下设置的复制标志:

 Clipboard.Clear(); Clipboard.SetDataObject(myClassThatImplementsIDataObject, true); 

要再次获取数据,可以使用以下方法检索标准文本:

 Clipboard.GetText(); 

可以使用数据方法检索数据:

 Clipboard.GetData("name of my class"); 

另一个有用的点是测试我可以通过使用BinaryFormatter类来执行此测试来序列化我放入剪贴板的对象…如果抛出exception,复制到剪贴板也会失败,但是无声。

所以我的class级有:

 [Serializable] public class ClipboardPromptsHolder : IDataObject { ... } 

我有一个类似的场景,在将我的课程标记为可序列化后,我得到了它的工作。

因此,尝试将Serializable属性放在类Data.Sources.PromptResult上。