Проблема приведения e.Data.GetData в перетаскивание WinForms - PullRequest
3 голосов
/ 19 августа 2011

Я пытаюсь сделать перетаскивание между двумя экземплярами моих программ, но когда я пытаюсь привести данные к моему типу, это вызывает исключение Invalid Cast.

    protected virtual void GetDropIEntities(DragEventArgs e)
    {

        foreach (string s in e.Data.GetFormats())
            Console.WriteLine(s);

        Entity[] myDroppedEnts = (Entity[])e.Data.GetData(e.Data.GetFormats()[0]);

    }

Самое странное, что Console.WriteLine пишет «Entity []» на выходе, но при попытке привести исключение выдается.Может кто-нибудь помочь мне с этим?Спасибо заранее!

1 Ответ

1 голос
/ 10 ноября 2011

Чтобы перетаскивать объекты из одного экземпляра приложения в другой, объект должен быть serializable .В противном случае приведение не будет работать должным образом.

Чтобы выполнить это, вы можете добавить атрибут [Serializable] в свой класс Entity и при необходимости реализовать интерфейс ISerializable.Чтобы узнать, как сделать класс Serializable, см. http://msdn.microsoft.com/en-us/library/4abbf6k0(v=VS.90).aspx

Это та же проблема с использованием буфера обмена.Отличный пример можно увидеть на этом сайте CodeProject:

http://www.codeproject.com/KB/cs/copycustomclasstoclipbrd.aspx

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