C#复制和粘贴对象

时间:2019-03-13 15:51:57

标签: c# serialization clipboard

所以我试图复制和粘贴对象,但无法正确处理。我已经搜索了所有主题,但似乎仍然无法正常工作。这是代码:

在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方法时,似乎没有一个返回内存流。我不确定如何从内存流中提取对象。

谢谢

1 个答案:

答案 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);
        }
    }