拖放在C#Winforms应用程序中不起作用

本文关键字:不起作用 应用程序 C#Winforms 拖放 | 更新日期: 2023-09-27 18:28:19

我正在尝试创建一个windows窗体,可以在其中放置文件/文件夹。

我在WinForms应用程序中有以下代码

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Debug.Print("DragEnter");
    }
    private void Form1_DragDrop(object sender, DragEventArgs e)
    {
        MessageBox.Show("Dropped!");
    }
}

我已将AllowDrop属性设置为true。我已尝试在Visual Studio中调试运行该应用程序。根据对其他类似问题的回答,我尝试以管理员身份运行编译后的exe。我已尝试以管理员身份运行已编译的exe,而不是

但无论我做什么,我都无法启动DragDrop事件。但是,DragEnter事件确实触发。我错过了什么?

拖放在C#Winforms应用程序中不起作用

您的DragDropEffect设置正确吗?尝试将其放置在DragEnter事件处理程序方法中:

    private void Form1_DragEnter(object sender, DragEventArgs e)
    {
        Console.WriteLine("DragEnter!");
        e.Effect = DragDropEffects.Copy;
    }

默认情况下,它被设置为DragDropEffects.None,因此Drop事件不会触发。

对于那些因为上面的提示不起作用而阅读本文的人。

请注意,Drag&如果您以"管理员身份"运行Visual Studio或应用程序,Drop将不起作用,如下所述:https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm

不要忘记在表单的属性中将AllowDrop更改为"True"您的代码可能很好,但如果未将此属性启用为True,它将不起作用。默认情况下,它设置为false。

尝试在Form1_DragEnter:中使用类似的东西

private void Form1_DragEnter(object sender, DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))
        e.Effect = DragDropEffects.All;
    else
    {
        String[] strGetFormats = e.Data.GetFormats();
        e.Effect = DragDropEffects.None;
    }
}

这会触发Form1_DragDrop

是否编写了拖动对象的MouseDown和MouseMove事件。

另一个非常棘手的问题可能是您覆盖了OnHandleCreated,但忘记调用基本实现。然后,您的应用程序无法设置所需的内部窗口设置以尊重您的AllowDrop属性。

例如,确保在覆盖中调用base.OnHandleCreated(e),您就可以了。

尽管表单的AllowDrop设置为true,但我也遇到了这个令人困惑的问题!

在我的Windows窗体应用程序(VS2017)中,我必须确保设置了一个有效的启动对象:例如myprojectname。程序和一切都很好!

我指定了一个命令行,它指向一个已不存在的文件。不知怎么的,这阻止了拖拽进入射击。一旦我把它取下来,一切又好了。

这可能是一种罕见的情况,但有一天可能会对某人有所帮助:

以上这些对我都不起作用。我在Form_DragDrop中的断点从未被击中。

事实证明,处理程序函数内部的代码正在调用另一个DLL的静态函数,该函数未能加载(BadImageException)。此错误被忽略,整个事件处理程序也没有被调用。