ドラッグ&ドロップに対応する
基本的な処理の流れは以下の通り
- DragEnterイベントを作る
- senderに対してDragDropEffects.Copyを行なう
- DragDropイベントを作る
2番目のDragDropEffects.Copyを行なわないとDragDropイベントは発生しません
ということで書いてみる
private void foo_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { // ドラッグ中のファイルやディレクトリの取得 string[] drags = (string[])e.Data.GetData(DataFormats.FileDrop); // ディレクトリの場合は System.IO.Directory.Exsits を使う if (drags.Length > 1 || !System.IO.File.Exists((string)drags[0])) { return; } e.Effect = DragDropEffects.Copy; } } private void foo_DragDrop(object sender, DragEventArgs e) { // ドラッグ&ドロップされたファイル string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); this.fooTextBox.Text = files[0]; // pathを表示 }
複数のファイルが選択された状態でのDragは許可しないようにした
許可する場合は drags.Length > 1 を外して、foreachを利用して存在を確認するようにすればいい