C# で作成したフォームアプリケーションに、
エクスプローラからドロップされたファイルパスを取得する機能を付加するには、
例えばフォームに配置したlistBox1に対して以下の実装を行えば良い。
- AllowDrop プロパティを true に設定する
- DragEnter イベントハンドラを実装し、ドラッグドロップを受け付けることを表明する
- DragDrop イベントハンドラを実装し、ドラッグドロップされたファイルパスを受け取って処理する
SampleDragDrop.cs
void MainForm_Load(object sender, EventArgs e)
{
// ドラッグドロップを受け付ける
listBox1.AllowDrop = true;
}
void ListBox1_DragEnter(object sender, DragEventArgs e)
{
// ドラッグドロップ時にカーソルの形状を変更
e.Effect = DragDropEffects.All;
}
void ListBox1_DragDrop(object sender, DragEventArgs e)
{
// ファイルが渡されていなければ、何もしない
if ( ! e.Data.GetDataPresent(DataFormats.FileDrop)) return;
// 渡されたファイルに対して処理を行う
foreach (var filePath in (string[])e.Data.GetData(DataFormats.FileDrop)) {
listBox1.Items.Add(filePath);
}
}