将文件拖放到文本框中

时间:2012-02-27 11:11:27

标签: c#

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

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)运行,则无效

5 个答案:

答案 0 :(得分:21)

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

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

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

答案 1 :(得分:10)

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

e.Handled = true;
<{1}}事件中的

,如herehere所述(它们是相同的文章,但万一有人失败)。

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

PreviewDragEnter

答案 4 :(得分:1)

如果您的visual studio在管理员权限下运行,则拖放功能似乎无效。

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