У меня возникла проблема, связанная со следующим сценарием. Приложение A имеет DataGridView, из которого выбираются объекты.Они перетаскиваются в DataGridView внутри приложения B, и объекты копируются в новый список.Вот код в приложении 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 #.
Я не уверен, что мне не хватает.Предполагается, что эти данные будут преобразованы в список массивов.
Спасибо за помощь!
edit Это текст исключения из приведения
Первое случайное исключение типа «System.InvalidCastException» произошло в dfResultsControls.dll
Дополнительная информация: Невозможно привести объект COM типа «System .__ ComObject» к типу класса «System.Collections.ArrayList».Экземпляры типов, которые представляют компоненты COM, не могут быть преобразованы в типы, которые не представляют компоненты COM;однако они могут быть преобразованы в интерфейсы, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.