Когда я пытаюсь сделать следующее, результаты являются неожиданными. Любые идеи будут высоко оценены!Использование подкласса DataObject в качестве буфера обмена DataObject
Class DataObjectSub
Inherits DataObject
End Class
Sub Test()
Dim myObject = New DataObjectSub
myObject.SetData("Test")
Clipboard.SetDataObject(myObject)
Dim myRetrievedObject As IDataObject = Clipboard.GetDataObject
Console.Write(myRetrievedObject.GetType.ToString)
Dim myRetrievedObject2=TryCast(Clipboard.GetDataObject,DataObjectSub)
End Sub
myRetrievedObject2 нет ничего
Выход Write утверждения: "System.Windows.Forms.DataObject". Разве это не «DataObjectSub»? Мне что-то не хватает?
Edited по запросу:
В случае Drag/операций Drop, что DataObject (реализации IDataObject) снова используется один может сделать это:
Sub TestDragDrop
Dim myObject as iDataObject=new DataObjectSub
someControl.DoDragDrop(myObject, myAllowedEffects)
End Sub
Позже ... в DragOver обработчик события:
Sub anotherControl_DragOver(sender as object, e as DragEventArgs)
Dim myRetrievedObject1 as DataObjectSub = TryCast(e.Data, DataObjectSub)
Dim myRetrievedObject2 as IDataObject = e.Data
End Sub
хорошо работает и как myRetrievedObject1 и myRetrievedObject2 не являются ничего. Типы обоих извлеченных объектов - DataObjectSub.
Спасибо за любые идеи и терпение! :)
Спасибо за ваш ответ! Моя путаница такова: MSDN (ссылка, которую вы предоставили) утверждает, что возвращаемый объект GetDataObject является iDataObject (а не DataObject). Если вы пытаетесь: Dim myObject как DataObject = Clipboard.GetDataObject получает ошибку Implicit Conversion, так как iDataObject не может быть неявно преобразован в DataObject. Если MS хотел, чтобы возвращаемое значение GetDataObject было DataObject, почему метод возвращает iDataObject? (Parenthetically iDataObject, используемый в операции DragDrop, принимает подклассовый DataObject (например, DataObjectSub) и отлично работает с ним). – cak
@cak Пожалуйста, взгляните на мой обновленный ответ. – varocarbas