事の発端
ドラッグ&ドロップでファイルパスを取得する機能を持つアプリをC#で作りたいと考え
Csharperにはお馴染みのDOBONさんの記事を参考にプログラムを作成する。
WindowsFormsにおけるD&Dの動きの流れとしては
- AllowDropをTrueにしたコントロール上に何らかのオブジェクトがドラッグされるとまず
- DragEnterなるイベントが発生する。そこでD&Dを許可する事で、Dropされた際に
- DragDropイベントが発生するのでその中で渡されたファイルパスをどうにかするというもの。
事前にDragEnterイベント内でD&Dを許可しないと、後続のDragDropイベントが発生しない、というのが初めてD&D機能を扱う自分にとっては新鮮でした。
ででで、VisualStudioで実際に作ったアプリをデバッグしてファイルをD&Dしてみると
DragEnterイベントが発生しない!
リリースビルドしたアプリではDragEnterイベントが発生した
デバッグで起動したアプリにD&Dしてもイベントが発生しないので色々調べると
管理者権限云々が関係あるという記述を見つける。
自分はVisualStudioを管理者権限で起動していたので、Debugでも管理者で起動されてるのでは?と考え
一旦リリースしてアプリを通常起動してD&Dしてみるとイベントが発生した
そしてそのアプリを管理者権限で実行してD&Dしてみるとイベントが発生しなかった
とりあえず解決
管理者権限で起動したアプリケーションでD&Dを行うのは、どうもややこしい制約があるそうです
UACやら管理者権限やらは詳しく無いので別途検索して頂くのが良いかと思います。
とりあえず解決策としてVisualStudioを通常起動する事で、デバッグ時にD&Dを有効にする事が出来ました。
やはりVisualStudioを管理者権限で起動すると、Debugも管理者扱いになる模様です。
初歩的過ぎる内容かもしれませんが、ハマって1時間くらい浪費したので
誰かのお役に立てれば幸いです。