我有 2 个控件,一种形式:列表和树(具体类型名称无关紧要)。
在列表控件中,我执行 DoDragDrop 方法。作为第一个参数,我传递了一个数据绑定(bind)到该行的对象。该对象实现了特定的接口(interface),并标有Serializable属性。
我想要的是在树控件的 DragEnter/DragDrop 事件处理程序中检索该对象。我正在使用以下代码:
void TreeControlDragEnter(object sender, DragEventArgs e)
{
var formats = e.Data.GetFormats();
var data = e.Data.GetData(typeof (IFoo));
}
不幸的是,结果数据为空,格式是一个单元素数组,其中包含特定类型的名称(实现 IFoo)。我假设我必须将确切的类型名称传递给 GetData 才能检索对象,但这是不可能的,因为它是一个私有(private)类。
有没有办法通过接口(interface)获取对象?
最佳答案
您必须提供与首先序列化的类相同的类型。您不能使用序列化类的接口(interface)或基类,因为不止一种格式可能与它匹配,并且它不知道要反序列化哪一个。如果您有多个类都实现了 IFoo,并且每个类在数据对象中都有一个实例,那么请求 IFoo 将是不明确的。因此,您必须询问序列化到数据对象中的确切类型。
这意味着您不应将类放入无法反序列化的数据对象中,因为它们在另一端是私有(private)的。
关于c# - 拖放自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6547147/