Clipboard.GetDataObject () всегда возвращает ноль - PullRequest
0 голосов
/ 21 января 2019

Я борюсь с использованием буфера обмена для копирования / вставки объекта, поэтому я создал очень простой пример, чтобы продемонстрировать проблему.

Что очень расстраивает, так это то, что тот же код работал раньше и недавно остановился, и я не могу понять, что не так.

В принципе, проблема в том, что dataObject.GetData () всегдавозвращает ноль, даже если dataObject.GetDataPresent () возвратил true ранее.

Я работаю на .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;
}
}

Есть идеи, пожалуйста?

1 Ответ

0 голосов
/ 22 января 2019

Я отвечаю на свой вопрос, чтобы поделиться своим опытом.

Короче говоря, в исходном коде я хотел скопировать / вставить объект, который ссылался на тип (XmlFont, тип-оберткаЯ создал, чтобы разрешить сериализацию типа Font), который не был явно помечен атрибутом Serializable.Самое смешное, что этот объект был успешно сериализован в / из файла с использованием XmlSerializer, так что эта часть для меня до сих пор неясна.Но пометка типа XmlFont как Serializable мгновенно решила проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...