トップ回答者
Drag&Dropでファイル名を取得する方法について

質問
-
VC++ Expressを始めたばかりプログラミングの初心者です。
CLRのプロジェクトでWindowsフォームアプリケーションを作成し、
そこにエクスプローラ上からテキストファイルをDrag&Dropし、
ファイル名をStringで取得、ステータスバー等に表示するような
アプリケーションを作ろうと思っています。
private: System::Void Form1DragEnter(System:
bject^ sender, System::Windows::Forms:
ragEventArgs^ e) {
if(e->Data->GetDataPresent(DataFormats::FileDrop))
e->Effect = DragDropEffects::All;
else
e->Effect = DragDropEffects::None;
}private: System::Void Form1DragDrop(System:
bject^ sender, System::Windows::Forms:
ragEventArgs^ 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でフルパスを得る方法をご教示
頂けないでしょうか。よろしくお願いします。
回答
-
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 Snippetarray<String^>^ files
= static_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop, true));
String^ xname = files[0];
とすればうまくいくでしょう。
すべての返信
-
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 Snippetarray<String^>^ files
= static_cast<array<String^>^>(e->Data->GetData(DataFormats::FileDrop, true));
String^ xname = files[0];
とすればうまくいくでしょう。