首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IDataObject拖放问题,从__ComObject开始转换

IDataObject拖放问题,从__ComObject开始转换
EN

Stack Overflow用户
提问于 2011-11-10 20:40:20
回答 1查看 1.6K关注 0票数 2

我遇到了一个与以下场景有关的问题,应用程序A有一个DataGridView,从中选择对象。它们被拖到应用程序B中的DataGridView中,对象被复制到新的列表中。下面是应用程序A中的代码,准备拖放:

代码语言:javascript
复制
       ArrayList ToDrag = this.GetSelectedBoundItems();
       DataObject data = new DataObject(ToDrag);
       this.DoDragDrop(data, DragDropEffects.Move | DragDropEffects.Copy);

问题是:接收端无法获得ArrayList。以下是这方面的代码:

代码语言:javascript
复制
 //formats has the value of "System.Collections.ArrayList"
 var formats = myRetrievedObject.GetFormats();

 //candoit has the value "true"
 var candoit = myRetrievedObject.GetDataPresent(typeof(ArrayList));

 //DraggedItems is of type "System.__ComObject"
 var DraggedItems = myRetrievedObject.GetData(typeof(ArrayList));

 //this returns null.  I 'think' this should work
 ArrayList DraggedItems2 = myRetrievedObject.GetData(typeof(ArrayList)) as ArrayList;

 //This throws an exception (see below)
 ArrayList DraggedItems2 = (ArrayList)myRetrievedObject.GetData(typeof(ArrayList)) as ArrayList;

这个曾经工作过。在这方面发生了两件事,我们从.net 2.0跳到了.net 4.0,这段代码被翻译成C++.net到C#。

我不知道我错过了什么。应该将该数据转换为数组列表。

谢谢你的帮助!

编辑这是转换中的异常文本

System.InvalidCastException类型的第一次例外发生在dfResultsControls.dll中

其他信息:无法将类型为“System.__ComObject”的COM对象转换为类类型‘System.Collection.information’。表示COM组件的类型的实例不能转换为不表示COM组件的类型;但是,只要底层COM组件支持对接口的IID的QueryInterface调用,就可以将它们转换到接口。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 14:09:26

使(数据)对象可序列化为我解决了这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8085995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档