2011-07-01 8 views
5

リストとツリー(特定のタイプ名は関係ありません)の2つのコントロールがあります。カスタムオブジェクトをドラッグ&ドロップする

リストコントロールでは、DoDragDropメソッドを実行します。最初の引数として、その行にバインドされたデータであるオブジェクトを渡します。オブジェクトは特定のインタフェースを実装し、Serializable属性でマークされます。

私が欲しいのは、ツリーコントロールのDragEnter/DragDropイベントハンドラでそのオブジェクトを取得することです。私は、次のコードを使用しています:

void TreeControlDragEnter(object sender, DragEventArgs e) 
{ 
    var formats = e.Data.GetFormats(); 
    var data = e.Data.GetData(typeof (IFoo)); 
} 

残念ながら、結果のデータがnullで、フォーマットは(IFoo実装)は、特定のタイプの名前を保持する1要素のアレイです。私はオブジェクトを取得するためにGetDataに正確な型名を渡す必要があると仮定しますが、それはプライベートクラスなので不可能です。

インターフェイスからオブジェクトを取得する方法はありますか?

答えて

4

最初にシリアライズされたクラスと同じタイプを指定する必要があります。シリアライズされたクラスのインタフェースまたは基本クラスは、複数のフォーマットに一致する可能性があり、どちらをデシリアライズするかわからないため、使用できません。 IFooを実装するクラスが複数あり、それぞれのインスタンスがデータオブジェクト内にある場合、IFooを求めるのはあいまいです。したがって、データオブジェクトにシリアライズされた正確な型を要求する必要があります。

これは、デシリアライズできないクラスがデータオブジェクトに配置されないようにするためのものです。

関連する問題