所以我试图复制和粘贴对象,但无法正确处理。我已经搜索了所有主题,但似乎仍然无法正常工作。这是代码:
在Visual Studio的一个解决方案中,我有一个类:
namespace test4
{
[Serializable]
public class copypaste
{
public string test = "a";
}
}
和代码的复制部分:
private void btn1_Click(object sender, EventArgs e)
{
var copy_obj = new copypaste();
DataObject d = new DataObject(copy_obj);
Clipboard.SetDataObject(d);
}
在另一种解决方案中,我有:
namespace test4
{
[Serializable]
public class copypaste
{
public string test = "a";
}
}
和粘贴部分代码:
private void btnTest_Click(object sender, EventArgs e)
{
var d = Clipboard.GetDataObject();
if (d.GetDataPresent("test4.copypaste"))
{
var o = d.GetData("test4.copypaste");
Debug.WriteLine( ( (copypaste)o ).test );
}
}
但是,最后一行出现以下错误: 'System.InvalidCastException:'无法将类型为'System.IO.MemoryStream'的对象转换为类型为'test4.copypaste'。'
我经历了其他一些问题,这些问题提出了这种复制/粘贴代码的方式,但是当他们调用GetData方法时,似乎没有一个返回内存流。我不确定如何从内存流中提取对象。
谢谢
答案 0 :(得分:0)
牢记这个reference并使用可序列化的类,它可以按预期工作:
private void copyButton_Click(object sender, EventArgs e)
{
DataFormats.Format myFormat = DataFormats.GetFormat("test4.copypaste");
var copy_obj = new copypaste();
DataObject myDataObject = new DataObject(myFormat.Name, copy_obj);
Clipboard.SetDataObject(myDataObject);
}
private void pasteButton_Click(object sender, EventArgs e)
{
var d = Clipboard.GetDataObject();
if (d.GetDataPresent("test4.copypaste"))
{
var o = d.GetData("test4.copypaste");
Debug.WriteLine(((copypaste)o).test);
}
}