【问题标题】:Drag and drop custom object拖放自定义对象
【发布时间】:2011-07-01 11:07:23
【问题描述】:

我有 2 个控件一种形式:列表和树(具体类型名称无关)。

在列表控件中我执行 DoDragDrop 方法。作为第一个参数,我传递了一个对象,该对象是绑定到该行的数据。该对象实现了特定的接口,并用 Serializable 属性标记。

我想要的是在树控件的 DragEnter/DragDrop 事件处理程序中检索该对象。我正在使用以下代码:

void TreeControlDragEnter(object sender, DragEventArgs e)
{
    var formats = e.Data.GetFormats();
    var data = e.Data.GetData(typeof (IFoo));
}

不幸的是,结果数据为空,格式是一个包含特定类型名称的单元素数组(实现 IFoo)。我假设我必须将确切的类型名称传递给 GetData 来检索对象,但这是不可能的,因为它是一个私有类。

有没有办法通过接口获取对象?

【问题讨论】:

    标签: c# winforms drag-and-drop


    【解决方案1】:

    您必须提供与最初序列化的类相同的类型。您不能使用序列化类的接口或基类,因为这样可能会有不止一种格式与之匹配,并且它不知道要反序列化哪一种。如果您有几个类都实现了 IFoo 并且在数据对象中每个类都有一个实例,那么要求 IFoo 将是模棱两可的。所以你必须询问被序列化到数据对象中的确切类型。

    这意味着您不应将类放入无法反序列化的数据对象中,因为它们在另一端是私有的。

    【讨论】:

      猜你喜欢
      • 2019-01-08
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多