none
Drag&Dropでファイル名を取得する方法について RRS feed

  • 質問

  • VC++ Expressを始めたばかりプログラミングの初心者です。

    CLRのプロジェクトでWindowsフォームアプリケーションを作成し、

    そこにエクスプローラ上からテキストファイルをDrag&Dropし、

    ファイル名をStringで取得、ステータスバー等に表示するような

    アプリケーションを作ろうと思っています。

     

    private: System::Void Form1DragEnter(System:Surprisebject^  sender, System::Windows::Forms:Big SmileragEventArgs^  e) {
        if(e->Data->GetDataPresent(DataFormats::FileDrop))
         e->Effect = DragDropEffects::All;
        else
         e->Effect = DragDropEffects::None;
       }

    private: System::Void Form1DragDrop(System:Surprisebject^  sender, System::Windows::Forms:Big SmileragEventArgs^  e) {
        Object^ ob = e->Data->GetData(DataFormats::FileDrop, true);
        String^ xname = ob->ToString();
    //    String^ xname = e->Data->GetData(DataFormats::FileDrop, false)->ToString();
        toolStripStatusLabel2->Text=xname+"]  ";
       }

     

    このようなプログラムを組んだところ、Objectではフルパスが得られているのですが、

    ToStringに変換したあとで、"System.String[]"となってしまいます。

     

    初歩的な質問でお手数をかけますが、Stringでフルパスを得る方法をご教示

    頂けないでしょうか。よろしくお願いします。

     

    2007年4月26日 1:03

回答

  •  tsuchi さんからの引用
      

    このようなプログラムを組んだところ、Objectではフルパスが得られているのですが、

    ToStringに変換したあとで、"System.String[]"となってしまいます。


    ここから、obはString[] 型つまり array<String^>^ 型だとわかります。
    ですので、一度 array<String^>^ を解して取得することになります。

    つまり
     tsuchi さんからの引用
      Object^ ob = e->Data->GetData(DataFormats::FileDrop, true);
    String^ xname = ob->ToString();



    Code Snippet
    array<String^>^ files
        = static_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop, true));
    String^ xname = files[0];

     

    とすればうまくいくでしょう。

    2007年4月26日 1:18
  • 蒼の洞窟様

     

    教えていただいた記述で上手く行きました。

    私はまだcastがよく分かっていないようです。

    勉強してみます。

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

    2007年4月26日 2:37

すべての返信

  •  tsuchi さんからの引用
      

    このようなプログラムを組んだところ、Objectではフルパスが得られているのですが、

    ToStringに変換したあとで、"System.String[]"となってしまいます。


    ここから、obはString[] 型つまり array<String^>^ 型だとわかります。
    ですので、一度 array<String^>^ を解して取得することになります。

    つまり
     tsuchi さんからの引用
      Object^ ob = e->Data->GetData(DataFormats::FileDrop, true);
    String^ xname = ob->ToString();



    Code Snippet
    array<String^>^ files
        = static_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop, true));
    String^ xname = files[0];

     

    とすればうまくいくでしょう。

    2007年4月26日 1:18
  • 蒼の洞窟様

     

    教えていただいた記述で上手く行きました。

    私はまだcastがよく分かっていないようです。

    勉強してみます。

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

    2007年4月26日 2:37