我尝试将文件夹名称放在文本框中,所以我使用了这段代码:
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
有什么想法吗?
答案 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
转换为字符串。