WinForms拖放中e.Data.GetData的类型转换问题

3
我正在尝试在我的程序的两个实例之间进行拖放,但是当我尝试将数据转换为我的类型时,它会抛出“Invalid Cast Exception”的异常。
以下是代码:
    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
当你这样做时,DLL地狱总是潜伏在角落里。使用fuslogvw.exe来解决程序集解析问题。 - Hans Passant
你好Hans, 谢谢你的回复,但我不明白fuslogvw.exe如何帮助我识别问题。这个工具不是用来检测缺失的程序集吗? - zezespecial
当您选择记录所有绑定时,它还会向您显示加载的程序集来自哪里。 - Hans Passant
1个回答

1

要从一个应用程序实例拖放对象到另一个实例,该对象必须是可序列化的。否则,强制转换将无法按预期工作。

为了实现这一点,您可以向实体类添加[Serializable]属性,并选择性地实现ISerializable接口。有关如何使类可序列化的介绍,请参见:http://msdn.microsoft.com/en-us/library/4abbf6k0(v=VS.90).aspx

使用剪贴板时也会出现同样的问题。在这个CodeProject网站上可以看到一个很好的例子:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接