1

フォルダー名をテキストボックスに入れてみるので、このコードを使用しています:

private: System::Void textBox1_DragEnter(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) {
             if (e->Data->GetDataPresent(DataFormats::FileDrop))
             {
                 e->Effect = DragDropEffects::Copy;
             }
         }
private: System::Void textBox1_DragDrop(System::Object^  sender, System::Windows::Forms::DragEventArgs^  e) {
             if (e->Data->GetDataPresent(DataFormats::FileDrop))
             {
                 textBox1->Text = Convert::ToString(e->Data->GetData(DataFormats::FileDrop));
             }
         }

それは機能しています(0エラー)が、フォルダーをテキストボックスに入れると、テキストボックスにはパスが表示されませんが:System.String[]

私が使用している: C++、.NET、Visual Studio 2010

何か案は?

4

1 に答える 1

1
e->Data->GetData(DataFormats::FileDrop)

string[]単一の ではなく (文字列の配列) を返していstringます。を使用してこれを文字列に変換しようとすると、型名を表示するConvert::ToStringというデフォルトの動作が使用されます。Object.ToString()他に何を期待しますか?文字列の配列を単一の配列に集約するというデフォルトの概念はありません。

によって返されたオブジェクトを使用し、GetData()それを自分で文字列に変換する必要があります。単一のアイテムが必要な場合は、それをテストし、最初のアイテムを取得すると、文字列が得られます。

多くのアイテムをサポートしたい場合はstring.Join()、たとえば、区切り文字を使用して指定できます。

これを使用して、ドロップされたファイル データにアクセスする必要があります。

array<System::String^>^ items = (array<System::String^>^)e->Data->GetData(DataFormats::FileDrop);

そこitemsから、文字列への変換方法を決定できます。

于 2012-08-26T10:50:57.980 に答える