ファイルのドラッグアンドドロップを受け付ける - Visual C# プログラミング

PROGRAM


ファイルのドラッグアンドドロップを受け付ける

Visual C# で、ユーザーにファイルをドラッグアンドドロップしてもらい、それを処理するプログラミングを作成する方法について整理してみます。

たとえば、DataGridView にファイルをドラッグアンドドロップしてもらおうとした場合、まずは Form の "AllowDrop" プロパティを "True" に設定します。

こうすることで、そのフォーム上でドラッグアンドドロップしてもらうための、最初の準備ができました。

このようにしたら、後はプログラム内で、詳細な制御を行っていきます。

 

そのために、"DragDrop" イベントと "DragEnter" イベントに対するイベントハンドラを作成します。

プロパティエディタで "イベント" ボタンをクリックしたら、"DragDrop" と "DragEnter" のそれぞれでダブルクリックをして、それらのイベントハンドラのコードを作成します。

 

そして、まずは "DragEnter" のイベントハンドラー内で、ドラッグされてきたファイルを受け入れられることを通知するプログラムを記載します。

private void dataGridMeisaisyo_DragEnter(object sender, DragEventArgs e)

{

// ファイルのドラッグアンドドロップのみを受け付けるようにしています。

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

{

// ドロップされたファイルは、アプリケーション側に内容がコピーされるものとします。

e.Effect = DragDropEffects.Copy;

}

}

ここでは、"e.Data.GetDataPresent" メソッドに "DataFormats.FileDrop" を指定することで、ファイルがドロップされた場合のみを受け付けるようにしています。

他にもたとえば、テキストをそのままドロップすることを許可する場合には "DataFormats.Text" を指定することでできるようになります。このとき、あくまでもテキストをドロップした時であって、ファイルの形式がテキストという訳ではないので、少し注意が必要です。

拡張子などで選別したい場合には、パス文字列からフォルダー名やファイル名を取得する に記した方法などと組み合わせて、受け入れないものは "e.Effect = DragDropEffects.None;" を設定するなどします。

 

ドラッグアンドドロップの受け入れの制御が出来上がったら、後は、"DragDrop" イベントハンドラーに、実際にドロップされた時の制御プログラムを実装します。

private void dataGridMeisaisyo_DragDrop(object sender, DragEventArgs e)

{

// ドラッグアンドドロップされたファイルのパス情報を取得します。

foreach (String filename in (string[])e.Data.GetData(DataFormats.FileDrop))

{

// "filename" 変数に格納された、ドロップされたファイルのパスそれぞれについて、ここで処理を行います。

 

}

}

ドラッグアンドドロップされたファイルは、"e.Data.GetData(DataFormats.FileDrop)" というように、データ形式としてファイル (DataFormats.FileDrop) を指定して GetData メソッドを呼び出すことで、投げ込まれたファイルのパス文字列として、取得することができます。

ドラッグアンドドロップされたファイルが 1 つでも、複数個でも、GetData メソッドでは String[] 配列でパスが取得できるようなので、取得できたパス情報を foreach ループなどで順次処理してあげることで、全てのファイルを処理することができるようになっています。

 


[ もどる ]