次のことを試してみると、結果は予想外です。どんなアイデアでも大歓迎です!
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 は Nothing です
Write ステートメントの出力は、"System.Windows.Forms.DataObject" です。「DataObjectSub」ではないでしょうか。明らかな何かが欠けていますか?
リクエストに応じて編集:
ドラッグ/ドロップ操作の場合、その 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 はどちらも Nothing ではありません。取得された両方のオブジェクトの型は DataObjectSub です。
アイデアと忍耐に感謝します!:)