C # Копирование и вставка объекта - PullRequest
0 голосов
/ 13 марта 2019

Итак, я пытаюсь скопировать и вставить объект, и у меня возникают проблемы с его получением Я искал темы, но все еще не могу заставить его работать. Вот код:

В одном решении в 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 голосов
/ 13 марта 2019

Имея в виду эталон и ваш сериализуемый класс, он работает как ожидалось:

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);
        }
    }
...