TextBox显示变量类型 - 不是内容

时间:2012-08-26 10:47:07

标签: .net string c++-cli

我尝试将文件夹名称放在文本框中,所以我使用了这段代码:

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

有什么想法吗?

1 个答案:

答案 0 :(得分: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转换为字符串。