none
【C#】PictureBoxで表示している画像データをデスクトップにドラッグ&ドロップする方法について RRS feed

  • 質問

  • pictureboxで保持している画像データをドラッグ&ドロップでデスクトップに落とす方法を探しています

    DataObjectを使用する方法を試していましたが、エラーが出て出来ません。

     

    何かよい方法はないでしょうか。

    2010年10月21日 12:30

回答

  • 勘違いでした。

    DataObjectで処理が出来ました。

    他プロセスがファイルを掴んでいたのをエラーと勘違いしておりました。

     

    皆様ありがとうございました。

    • 回答としてマーク 山本春海 2010年10月25日 4:53
    2010年10月22日 2:53

すべての返信

  • 外池と申します。DataObjectを使用する方法で出来るはずです。どんなエラーが出ているのでしょうか?


    (ホームページを再開しました)
    2010年10月21日 13:41
  • エラーとはコンパイルエラーか、例外(Exception)なのか、どういったメッセージなのか明らかにしてください。
    また、どういったコードを書けば再現するか、示せる範囲で書いてみてください。

    たとえば、前処理・後処理とか、エラー処理とか考えずに書いたコードだと、特にエラーは出ませんでした。

    private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
    {
     DataObject data = new DataObject();
     data.SetData(DataFormats.FileDrop, new string[] { @"C:\temp\test.txt" });
     DoDragDrop(data, DragDropEffects.All);
    }
    

    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。

     

    2010年10月21日 13:49
    モデレータ
  • もしかして、アプリケーション内で作成したBitmapオブジェクト(まだディスクに保存されていないメモリ上だけの存在)をファイル保存する目的でdrag & dropしようとしたのでしょうか?

    このBitmapオブジェクトをクリップボードに入れ、ペイントに貼りつけるようなことは可能です。しかし、ファイル名などの情報がないため、既存のDataObjectクラスでは、drag & dropでデスクトップ(もしくはExplorerで任意フォルダ)へdropすることはできません。

    かなり気合を入れてExplorerにファイル名などを伝える機能を持たせたDataObjectクラスを自作すれば実現可能です。
    # 私は250行ぐらいで実現してます。

    既にディスク上にあるファイルでしたら、Azuleanさんが書かれているように、ファイル名を渡すことでdrag & drop可能です。

    2010年10月21日 22:05
  • 質問者の方の回答が無いままの議論で恐縮ですが、佐祐理さんの「気合い」「250行」にひっかっかってしまいました。

    外池です。

    前提として、Imageオブジェクトだけがあって、それがPictureBoxのImageプロパティーに関連付けられているとします。で、ファイルDrop先でのファイル名はアプリ側で勝手に決めて良いとします。

    私だったら、まずImageをファイルに適当なファイル名をつけてjpgファイルで保管して、こいつを対象にしてDoDragをしてやるようにすると思うのですが・・・。佐祐理さんのプログラムの場合、前提条件に難しい点があったのでしょうか? もしかすると・・・、Dropの後にファイルに保管する動作にされているのでしょうか?


    (ホームページを再開しました)
    2010年10月21日 23:56
  • もしかすると・・・、Dropの後にファイルに保管する動作にされているのでしょうか?

    はいそうです。Imageオブジェクトに限らず一般化しています。zip等アーカイブのコンテンツを一時展開せずに直接Explorerに引き渡したりするためです。

    具体的にはDataFormatsの"FileGroupDescriptorW"と"FileContents"を実装しました。

    2010年10月22日 0:18
  • 勘違いでした。

    DataObjectで処理が出来ました。

    他プロセスがファイルを掴んでいたのをエラーと勘違いしておりました。

     

    皆様ありがとうございました。

    • 回答としてマーク 山本春海 2010年10月25日 4:53
    2010年10月22日 2:53