私は現在、エンドユーザーが実行時にコントロールを追加/削除/移動できるデザインサーフェスを設計するプロジェクトに取り組んでいます。
私はこのチュートリアル「TimDawsonによるWindowsフォームデザイナのホスティング」に従い、必要なすべての機能をほぼ実装しました。
チュートリアルを読みたくない人のための短編小説:、、、、およびその他のインターフェイスを実装IDesignerHost
しIContainer
、主に、本当にカスタムのデザインサーフェスが必要なため、フレームワークではすでに使用していませんISelectionService
IToolboxService
System.ComponentModel.Design.DesignSurface
質問 :
ユーザーが新しいControl
をからにドラッグアンドドロップできるようにしIToolboxService
たいIDesignerHost/IContainer
。このチュートリアルでControl
は、ツールボックスでクリックし、デザインサーフェスをクリックしてコントロールを追加します。
私が見つけたもの:
IToolboxService
からへ のドラッグアンドドロップを自動的に行う組み込み機能がありますがSystem.ComponentModel.Design.DesignSurface
、何もないところからIDesignerHostを実装すると、明らかに機能しません。このメソッドを使用する場合
Control.DoDragDrop(ToolboxItem)
、ドラッグアンドドロップを開始するには:IToolboxService.SerializeToolboxItem(ToolboxItem)
アイテムをシリアル化するために呼び出されますIToolboxService.IsToolboxItem(object)
シリアル化された ToolboxItemをデザインサーフェスにドロップできる
IToolboxService.IsSupported(object)
かどうかを評価するために呼び出されます- コントロールをドロップすると:コントロールドロップ
IToolboxService.DeserializeToolboxItem(object serializedObject)
を逆シリアル化するためにデザインサーフェスによって呼び出されます。
IToolboxService.SetCursor()
カスタムカーソルを定義するか、標準ウィンドウカーソルを使用するかを知るために呼び出されます。
問題 :
上記のすべてを「見つけたもの」に実装しましたが、ドラッグアンドドロップにはバグがあります。
- ドラッグしても問題ありませんが、デザインサーフェスにカーソルを合わせると、標準カーソルと"
DragDropEffects.Copy
"スタイルの間でカーソルが少し点滅します。 - ドロップしても何も起こらず、カーソルがデザインサーフェスを離れると(ドロップした後)、新しい
Control
ものが作成され、ドロップした場所に追加されます。
誰かが私がやっていることをやろうとしたことがありますか?もしそうなら、どのようにそれを管理しましたか?ポインタ/リンク/良いアドバイスを持っている人はいますか?
ありがとう=)