[英]drag and drop file into textbox
我想拖放一个文件,以便文本框显示完整的文件路径。 我已经使用了拖动输入和拖放事件,但我发现它们没有进入事件。
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
可以进行拖放并在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 在管理员权限下运行,则拖放功能似乎不起作用。
=> 在没有管理员权限的情况下运行visual studio,它会工作
编辑:测试拖放功能的解决方法是
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.