- PR -

ドラッグドロップでエクスプローラにファイルをコピーする方法

1
投稿者投稿内容
ryo
会議室デビュー日: 2004/09/20
投稿数: 4
投稿日時: 2004-09-20 17:40
こんにちは。

.NETのドラッグドロップ機能で、テキスト同士のやり取りやエクスプローラからドロップされたファイルパスを取得する・ファイルを開く、というのはよく目にしますが、エクスプローラに対してドロップし、ファイルコピーする、というような機能の実現方法が分かりません。

例えば、Windowsフォームのリストビューにはファイルパスのリストが格納されている状態で、ここからエクスプローラめがけてドロップすると、そのファイルパスにあるファイルがエクスプローラの該当フォルダにコピーされる、という方法です。

受け取った外部アプリケーション側が、オブジェクトの種類がDataFormats.FileDropであると認識する必要があるような気はしますが、その変換方法や元々こうしたことが実現可能なのかどうかが今一つ分かっていません。
(ヘルプ抜粋)DataFormats メンバ・FileDrop--Windows ファイル ドロップ形式を指定します。Windows フォームでは、この形式が直接使用されることはありません。この static (Visual Basic では Shared) フィールドは読み取り専用です。

ご存知の方、ご教示ください。よろしくお願いします。
もし、既に別スレッドで語られているようであればご容赦・ご指摘ください。
(かなり探したんですが、このような内容が見つからず・・・)
ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-09-21 00:12
一つの例としては次のような方法があります。

まずDataObject型の変数をDataFormats.FileDropを指定して作成します。
その際、指定するデータはエクスプローラに送りたいファイルのパスを
文字列配列で指定します。あとはDoDragDrop()メソッドにその変数
を指定してやればOKです。
イメージとしては以下のような感じです。

コード:
DataObject dobj = new DataObject(DataFormats.FileDrop,
                                 new string [] {ItemUnderMouseToDrag.Text});
DragDropEffects dropEffect = listView1.DoDragDrop(dobj, DragDropEffects.All);

ryo
会議室デビュー日: 2004/09/20
投稿数: 4
投稿日時: 2004-09-21 23:03
antさん、お返事ありがとうございます。
教えて頂いた内容で無事に解決することができました。

ファイルのパスを文字列配列で指定するんですね。今まで単体の文字列でファイルパスを渡してみたりとは試してみたのですが・・
後から他のエクスプローラからのドロップ受け取りのサンプルを見ると、、ループで配列から取り出しを行っているのに気が付きました。読み込み・勉強が足りませんでした。

丁寧にコード例まで示して頂き、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)