繁体   English   中英

将文件拖放到文本框中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM