将文件拖放到文本框中

我想拖放文件,以便文本框显示完整的文件路径。 我使用了拖动输入和拖放事件,但我发现它们没有进入事件。

private void sslCertField_DragDrop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) { e.Effect = DragDropEffects.All; } } private void sslCertField_DragEnter(object sender, DragEventArgs e) { string file = (string)e.Data.GetData(DataFormats.FileDrop); serverURLField.Text = file; } 

谁能指出我做错了什么?

更新:如果程序设置为以提升的权限运行(vista / win 7),则不起作用

检查文本框的AllowDrop属性 – 应将其设置为true 。 此外,在DataFormats.FileDrop情况下,将拖放数据转换为string[] ,而不仅仅是string

 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); if(files != null && files.Length != 0) { serverURLField.Text = files[0]; } 

我认为你应该在你的拖动事件处理程序中交换代码 – 通常你会向用户显示DragEnter中的拖放function并在DragDrop上执行实际操作。

提升的特权不应该与它有任何关系。 除了Max回答的DragDrop之外,您还需要实现DragOver事件。 这是应该为DragDrop添加的代码:

private void textBoxFile_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }

不要从visual studio运行它…运行.exe,这是你创建解决方案后创建的..希望有帮助:)

如果你正在使用WPF,它仍然无法解决这里的答案(这是我的情况),你需要使用

 e.Handled = true; 

PreviewDragEnter事件中,如此处和此处所述 (它们是相同的文章,但万一发生故障)。

以下是来自该来源的代码段:

 private void TextBox_PreviewDragEnter(object sender, DragEventArgs e) { e.Effects = DragDropEffects.Copy; e.Handled = true; } private void TextBox_PreviewDrop(object sender, DragEventArgs e) { object text = e.Data.GetData(DataFormats.FileDrop); TextBox tb = sender as TextBox; if (tb != null) { tb.Text = string.Format("{0}", ((string[])text)[0]); } } 

如果您的visual studio在管理员权限下运行,则拖放function似乎不起作用。

=>运行没有管理员权限的visual studio,它将工作