私は、C++/CLIのカスタムコントロール(Forms.Controlの直下の子)を作成しました。このコントロールは、ほとんどの処理とそのペイントを別のlegacy-ish MFCコントロールにオフロードします。私はこのコントロールをC#アプリケーションでラップしています。私は、アプリケーション内の同じフォームのUserControlからC++/CLIコントロールに項目をドラッグできるようにする必要があります。カスタムコントロールにドラッグ/ドロップイベントが表示されないのはなぜですか?
何らかの理由で、私のカスタムコントロールAllowDropをtrueに設定しているにもかかわらず、私のカスタムコントロールがドラッグアンドドロップイベントを受け取っていません。 (私はAllowDropが実行時に真であることを確認しました)。コールバックが呼び出されないため、DragEventArgsを調べたり操作したりする機会はありません。
ドラッグアンドドロップが正常に機能することを確認しました。たとえば、カスタムコントロールをPanelに置き換えた場合、ドラッグドロップコールバックが正常に取得されます。
ドラッグドロップコールバックをサポートするためにコントロールに実装する必要がある何かがありますか?コントロールがホバリングされていることをシステムが認識するために処理しなければならない微妙なものはありますか?ドラッグドロップ操作のターゲットにする必要がありますか?
注:
塗装を行いますMFCコントロールは、まだ私には利用できないので、私はちょうど私がペイントしようとしていること(OnPaintBackground
経由)、単純なグラデーションの背景を描きますよ。 OnPaint
に小さなグラデーションの矩形を描いています。
カスタムコントロールのハンドルが(デザイナー/コンストラクターコードを介して)作成される前とハンドルが作成された後(OnHandleCreatedオーバーライドを使用して)の両方で、AllowDrop = trueを設定しようとしました。行動に違いはありません。
ドラッグコントロールのカーソルは、カスタムコントロール上のデフォルトの「ドラッグしない」カーソルから変更されません。
私は、UserControlのサブコントロールのMouseDown
イベントのイベントハンドラからthis.DoDragDrop()
を呼び出しています。
DragDropは、ユーザーコントロールと同じアセンブリ内でC#で作成した別のカスタムコントロールで正常に動作するようです。それはちょうどうまくコールバックをキャプチャします。私のC++/CLIコントロールだけがそれらを見ていません。 initializecomponent gooは無関係です。私は変更なしでそれをすべてコメントすることができます。