none
WebフォルダからWindowアプリへDrag&Dropでの情報取得方法 RRS feed

  • 質問

  • C#のWindowアプリを作成しています。
    WebDAVのサーバに接続したWebフォルダがあり、
    そのファイルのパスをドラッグアンドドロップで
    取り出したいのですが出来ていません。
    この方法を教えていただけないでしょうか。

    以下の内容を試しました。

    private void textBox1_DragEnter(object sender,
     System.Windows.Forms.DragEventArgs e)
    {}

    と定義し、
    e.Data.GetFormats() で取得できる全ての文字列と
    DataFormatsがクラス変数として持っている全ての
    文字列について、
    e.Data.GetDataPresent("xxxx") で
    検査しましたが、どれにもあたりませんでした
    (全てfalseで返ってくる)ので行き詰まってしまいました。
    ご存知の方がいたら教えてください。

    2006年7月3日 2:53

すべての返信

  • WebDAVからのドロップデータはCOMデータで、もちろん標準データではありません。
    ドロップデータは、e.Data.GetFormats関数(eはDragEventArgs)でフォーマットタイプを得て、e.Data.GetData関数でデータがすべてとれると思いますが、
    単にWebDAVからのファイル名をとりたいのであれば、

    System.IO.MemoryStream stream =
          e.Data.GetData( "Shell IDList Array") as System.IO.MemoryStream

    などでファイル名などが入った、COMデータが取得できます。

    2006年7月3日 15:11
  • 返信ありがとうございます。
    内容を確認し、改めて下記の2点に
    問題が集約できると思っています。
    こちらで現在も調べてもいますが
    有用な情報が今のところ見つけられずにいますので
    引き続きお願いします。

    ・e.Data.GetDataPresent("Shell IDList Array") は
     falseとなるにも関わらず
     e.Data.GetData("Shell IDList Array") では
     MemoryStreamを取得することが出来る
     これはなぜか

    ・取得したMemoryStreamを読み取る方法について
     バイト配列の中身を覗いてみましたが
     複数種類のデータが混在していて、
     内部データ形式が分かっておりません
     どのように読み取るべきものなのか

    2006年7月4日 7:46
  • とっちゃんです。

    Shell IDList Array については、

    http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/programmersguide/shell_basics/shell_basics_programming/transferring/transfer.asp

    このあたりをご参照ください。英語ですが、ここに全ての基本情報が出てます。

    GetDataPresent でNGになるのは...ちょっとわからないですねぇ(^^;

     

    2006年7月4日 11:33
  • 返答が遅くなりすみません。
    ありがとうございます。
    指摘頂いた件をいろいろと見てみたのですが
    COMやShell等の知識に疎いこともあって
    それをC#で生かす方法が分かっておりません。

    最初の想定ではもっと単純に出来るのではないかと
    仮定しておりましたので
    今後、この問題を追求するのに
    あまり時間を取れないかもしれませんが
    もし何か分かったことがあったらフィードバックしたいと思います。

    2006年7月10日 1:57