c# - 拖放自定义对象

标签 c# winforms drag-and-drop

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

在列表控件中,我执行 DoDragDrop 方法。作为第一个参数,我传递了一个数据绑定(bind)到该行的对象。该对象实现了特定的接口(interface),并标有Seri​​alizable属性。

我想要的是在树控件的 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/

相关文章:

c# - 拖放在 C# Winforms 应用程序中不起作用

具有 native CDK 的 Angular 7 拖放嵌套列表

c# - 检查列表中的键/值对

c# - 如何在选择另一个@Html.DropDownList 后填充@Html.DropDownList

c# - ValueInjector Stack Overflow 映射实体与父实体

c# - Box2D XNA 中的 Pong

winforms - 不知道如何在 winforms powershell 中为标签添加粗体

c# - 有没有办法让 Linq to Entities 将无法识别的方法/函数映射到 MySql 函数?

c# - KeyDown KeySuppress 是否取消 KeyUp 事件?

python - 在 PyQt5 中的 QTreeWidget 和 QListWidget 之间拖动项目?