我正在努力使用剪贴板复制/粘贴对象,因此我创建了一个非常简单的示例来演示该问题。
非常令人沮丧的是,相同的代码在更早的时候就工作了,最近又停止了,我无法弄清楚出了什么问题。
基本上,问题在于即使dataObject.GetDataPresent()之前返回true,dataObject.GetData()始终返回null。
我正在.Net 4.5上运行。
using System;
using System.Windows.Forms;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var a = new TestClass();
a.Name = "Test";
a.Index = 1;
a.Live = true;
IDataObject dataObj = new DataObject();
// Method 1 : Not working
//dataObj.SetData(a);
// Method 2 : also not working
DataFormats.Format format = DataFormats.GetFormat(a.GetType().FullName);
dataObj.SetData(format.Name, false, a);
Clipboard.SetDataObject(dataObj, false);
}
private void button2_Click(object sender, EventArgs e)
{
IDataObject dataObject = Clipboard.GetDataObject();
// Method 1 : Not working
//if (dataObject.GetDataPresent(typeof(TestClass)))
//{
// // Issue => retrievedObj is ALWAYS null
// var retrievedObj = dataObject.GetData(typeof(TestClass));
//}
// Method 2 : also not working
if (dataObject.GetDataPresent(typeof(TestClass).FullName))
{
// Issue => retrievedObj is ALWAYS null
var retrievedObj = dataObject.GetData(typeof(TestClass).FullName);
}
}
}
public class TestClass
{
public string Name;
public int Index;
public bool Live;
}
}
请问有什么想法吗?
答案 0 :(得分:0)
我正在回答自己的问题,以分享我的经验。
长话短说,在原始代码中,我想复制/粘贴一个对象,该对象引用的类型(XmlFont,我创建的包装器类型,允许序列化字体类型)没有明确标记为Serializable属性。不过,有趣的是,使用XmlSerializer已成功将该对象序列化到文件中,或从文件中序列化了该对象,因此对我来说这部分仍然不清楚。但是将XmlFont类型标记为Serializable可立即解决该问题。