3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)エクスプローラからのファイルドラッグを受け入れる

.Net のコントロールエクスプローラからのファイルのドラッグアンドドロップを受け入れ、ファイルのパスを取得するための方法です。

MS:Visual C# アプリケーションにファイルのドラッグ アンド ドロップ機能を提供する方法に書いてる内容そのままですが、参考までに。。。

ソースは下記のようになります。

/// 

/// DragEnterイベントハンドラ ドラッグされたデータがコントロール内入ったとき。

///

///

///

private void lblDrag_DragEnter(object sender, DragEventArgs e)

{

//ドラッグのデータがファイルなら、エフェクトを表示する

if (e.Data.GetDataPresent(DataFormats.FileDrop))

{

e.Effect = DragDropEffects.All;

}

else

{

//Noneだとドラッグデータを受け入れない

e.Effect = DragDropEffects.None;

}

}

///

/// DragDropイベントハンドラ ドロップされた時

///

///

///

private void lblDrag_DragDrop(object sender, DragEventArgs e){

//ファイルパス取得

string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);

MessageBox.Show(s[0]);

}

まず、ドラッグを受け入れる .Net のコントロールAllowDrop プロパティを True にします。

次に、ドラッグを受け入れるコントロールの DragEnter イベントハンドラを実装し、ドラッグされたDataがファイルならマウスカーソルのエフェクトを変更します。

そして、ドラッグを受け入れるコントロールの DragDrop イベントハンドラを実装し、ファイルパスを取得します。

DragDrop イベントハンドラの DragEventArgs にドロップされたデータが入るので、そこから Data.GetData メソッドを使ってパスを取得します。