C# WinForms DragEnter 从不触发

Posted

技术标签:

【中文标题】C# WinForms DragEnter 从不触发【英文标题】:C# WinForms DragEnter never fires 【发布时间】:2012-02-05 07:07:55 【问题描述】:

我对此感到困惑。我尝试在DataGridView 上实现拖放。没有看到任何事件被触发,我尝试了一个带有文本框的简单表单。

我希望能够从 Windows 资源管理器中拖动文件或文件夹。

我遗漏了一些东西,因为这些事件永远不会触发。我确实读过DragEvents, Windows 7 and UIPI,但我仍然无法解决这个问题。

我没有想法,欢迎您提出建议。

public Form1()

    InitializeComponent();
    this.AllowDrop = true;
    textBox1.AllowDrop = true;
    textBox1.DragEnter += new DragEventHandler(textBox1_DragEnter);
    textBox1.DragDrop += new DragEventHandler(textBox1_DragDrop);
    textBox1.DragOver += new DragEventHandler(textBox1_DragOver);


void textBox1_DragOver(object sender, DragEventArgs e)

    e.Effect = DragDropEffects.Move;


void textBox1_DragDrop(object sender, DragEventArgs e)

    e.Effect = DragDropEffects.Move;


void textBox1_DragEnter(object sender, DragEventArgs e)

    e.Effect = DragDropEffects.Move;

看来这应该工作。我在 WP7 64 上进行了全新安装 - 在所有更新中,我没有运行病毒或恶意软件保护,或任何(据我所知)可能阻止这些事件触发的东西。

【问题讨论】:

您正试图从您的应用程序拖动到另一个应用程序? 表单的 DragEnter 事件处理程序不会触发,您没有订阅该事件。文本框的事件不会触发没有明显的原因。在其上设置断点并将文件从 Windows 资源管理器拖到框中。 @YochaiTimmer 我更新了帖子,我正在尝试从资源管理器中拖动文件。 @HansPassant 我在设计器中连接了这个。我已将其从示例中删除。这些事件都不会触发 - 这是我的问题。 好吧,你当前的 sn-p 只是没有重现问题,也没有明显的失败解释。在另一台机器上试试。顺便说一句,有一个名为“form1”的构造函数很奇怪。样板文件始终是 Form1,大写 eff。 总是复制粘贴一个sn-p,不要手动输入。 【参考方案1】:

我有同样的问题。这只是因为我正在从“以管理员身份运行”会话进行调试。我认为自从 VISTA 以来,有一种安全机制可以防止进入特权应用程序。

【讨论】:

这种东西让你头疼 这个解决方案你应该获得奖牌。 不好意思说一句“谢谢!!!!”评论...这个问题是一种公认​​的行为,Windows 不会通知任何有关此的事情,该死的 3 小时试图使拖放工作... 我完全同意这种说法这是让你头疼的东西;我花了几个小时弄清楚为什么事件没有触发......我正在从 以管理员身份运行 会话进行调试。 (我使用的是 Windows 10) 感谢您为我节省了三个小时的设计时间!【参考方案2】:

我发现当我在 Visual Studio 中以调试模式运行 Forms 应用程序时,它不起作用。只有当我在 VS 之外运行它时,它才能完美运行。据推测,这也与 Windows 7(可能还有更高版本)的安全性有关。

【讨论】:

以上是关于C# WinForms DragEnter 从不触发的主要内容,如果未能解决你的问题,请参考以下文章

C#界面里的AllowDrop属性DragDrop和DragEnter事件

C#界面里的AllowDrop属性DragDrop和DragEnter事件

从 WinForms 拖放到 WPF 问题

如何从 Spotify 拖放到 Winforms 应用程序

WinForms:使用 c# 添加控件

删除代码时有啥方法不会出现设计器错误? (C#、Visual Studio、WinForms)