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()example 并指定一个分隔符。

您应该使用它来访问已删除的文件数据:

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

从那里您可以决定如何转换items为字符串。

于 2012-08-26T10:50:57.980 回答