C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: ドラッグアウト


(過去ログ 75 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■43791 / inTopicNo.1)  ドラッグアウト
  
□投稿者/ レイバー (1回)-(2009/11/19(Thu) 02:34:01)

分類:[C#] 

オブジェクトをドラッグしてウィンドウを超え、フォルダに移動する、という処理を書くには、なにとなにを実装すればよいのでしょう?
逆はできていて、
・ドラッグを受けるコントロールのAllow.Dropをtrueにする。
・DrapEnterイベントを書く。
・DragDropイベントを書く。
とすることで、ドラッグ&ドロップを受けることはできています。
逆のドラッグ&ドロップを受けるページは結構見かけるのですが、ドラッグアウトのページは探し方が悪いのか、見つけることができないでいます。
よろしくお願いします。

引用返信 編集キー/
■43792 / inTopicNo.2)  Re[1]: ドラッグアウト
□投稿者/ れい (860回)-(2009/11/19(Thu) 03:47:21)
No43791 (レイバー さん) に返信
> オブジェクトをドラッグしてウィンドウを超え、フォルダに移動する、という処理を書くには、なにとなにを実装すればよいのでしょう?

フォルダとはエクスプローラーのフォルダですね?

既にファイルシステム上に存在する「ファイル」もしくは「フォルダ」を
エクスプローラーや他のアプリケーションにドロップするのは
DataObjectにFileDropを指定してパス文字列を渡すだけで出来ます。

これはあちこちにサンプルがあります。
DataFormats.FileDropやDataObjectなどで探すとすぐに出てきます。

その他のオブジェクトを「ファイル」としてドロップするのはなかなか困難です。
・オブジェクトのストリームとしての表現を作成
・OLE処理のきちんと行えるDataObjectを自分で実装する
・DataObjectにFileDescriptorとしてファイルとしての情報を登録する
・DataObjectにファイルの中身を示すIStreamを登録する
・ドロップ後、要求に応じてファイルの中身を返す
・完了後、なんとかしてIStreamを廃棄する
などの処理が必要です。

で、これがかなりめんどくさい処理になります。


ドロップが起きる瞬間、つまりQueryContinueDragでDragActionがDropになるときに
ファイルを作成し、そのパスをFileDropとして返すのが楽です。
この場合、ファイルを作成している間はエクスプローラー・アプリ共に停止するのが問題です。

この辺にもう少し丁寧に書いてあります。

http://social.msdn.microsoft.com/Forums/ja-JP/csharpgeneralja/thread/14b5f137-f2fc-4d28-b79d-2635bdb5d8b8

引用返信 編集キー/
■43796 / inTopicNo.3)  Re[2]: ドラッグアウト
□投稿者/ レイバー (2回)-(2009/11/19(Thu) 09:30:56)
No43792 (れい さん) に返信
れいさん。早速ありがとうございました。
いただいたキーワードで探してみます。
探せなかったのは探す言葉がわからなかったのでした。
助かりました。
早速探してみて読解中です。
またわからないところが会ったらよろしくお願いします。

引用返信 編集キー/
■43844 / inTopicNo.4)  Re[3]: ドラッグアウト
□投稿者/ レイバー (3回)-(2009/11/19(Thu) 21:54:35)
れいさん。
昨日は、大変有益なご示唆をいただきまして、ありがとうございました。
http://www.atmarkit.co.jp/fdotnet/dotnettips/384expdragdrop/expdragdrop.html
を参考に、トライ&エラーした結果(といってもたいしたことはしてないですが)、ドラッグアウトできるようになりました。
感謝します。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -