Wednesday, September 24, 2008

.NET FormのDrag and Drop

.NETのフォームアプリケーションで,ただ単にFormのプロパティでAllowDropを許可しても,イベント発生時に呼び出される関数の引数,DragEventArgsのエフェクトの値がDragDropEffects::Noneのままでは,DragDropがコールされない。 DragDropEffects 列挙体に記述されているように, DragEnter()がcallされた時に,エフェクトの値をNone以外の値に変更しておく。 例えばファイルがDrag and Dropされた場合はこんな手順。
  1. フォーム上に到達したときに,DragEnter()がcallされる。
  2. DragEnter()内ででDragEventArgsのエフェクトの値をAllに変更する
  3. この状態でドロップした際にDragDrop()がcallされるので,適当な処理をする。