将文件拖放到文本框中
我想拖放文件,以便文本框显示完整的文件路径。 我使用了拖动输入和拖放事件,但我发现它们没有进入事件。
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,它将工作