我遇到了一个与以下场景有关的问题,应用程序A有一个DataGridView,从中选择对象。它们被拖到应用程序B中的DataGridView中,对象被复制到新的列表中。下面是应用程序A中的代码,准备拖放:
ArrayList ToDrag = this.GetSelectedBoundItems();
DataObject data = new DataObject(ToDrag);
this.DoDragDrop(data, DragDropEffects.Move | DragDropEffects.Copy);问题是:接收端无法获得ArrayList。以下是这方面的代码:
//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调用,就可以将它们转换到接口。
发布于 2012-03-07 14:09:26
使(数据)对象可序列化为我解决了这个问题。
https://stackoverflow.com/questions/8085995
复制相似问题