我正在尝试创建一个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中的debug中运行应用程序。基于对其他类似问题的回答,我尝试以管理员身份运行编译后的exe。我试着以管理员身份运行编译后的exe not。
但是无论我做什么,我都无法触发DragDrop事件。然而,DragEnter事件 * 确实 * 触发。我错过了什么?
9条答案
按热度按时间k2arahey1#
您的
DragDropEffect
设置正确吗?尝试将其放置在DragEnter事件处理程序方法中:默认情况下,它被设置为
DragDropEffects.None
,因此不会触发Drop事件。svujldwt2#
对于那些谁会读这篇文章,因为上面的提示不起作用。
请注意,如果您以“管理员身份”运行Visual Studio或您的应用,则拖放将无法工作,如下所述:https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm
ny6fqffe3#
不要忘记在表单的属性中将AllowDrop更改为“True”您的代码可能没有问题,但如果此属性未启用为true,则无法工作。默认设置为false。
7eumitmz4#
尝试在Form1_DragEnter中使用类似以下内容:
这将触发Form1_DragDrop
xurqigkl5#
是否已编写拖动对象的MouseDown和MouseMove事件。
iecba09b6#
另一个非常讨厌和棘手的问题可能是,您已经覆盖了
OnHandleCreated
,但忘记了调用基本实现。那么您的应用程序无法设置所需的内部窗口设置来尊重您的AllowDrop
属性。例如,确保在覆盖中调用
base.OnHandleCreated(e)
,这样就可以了。ufj5ltwl7#
我也有这个令人困惑的问题,尽管形式有AllowDrop设置为真!
在我的Windows窗体应用程序(VS 2017)中,我必须确保设置了有效的Startup对象:例如myprojectname.程序和一切都很好!
2jcobegt8#
我指定了一个命令行,它指向一个不再存在的文件。不知何故,这是阻止阻力进入射击。一旦我把它取下来,一切都好了。
fykwrbwg9#
可能是一个罕见的场景,但也许有一天会对某人有所帮助:
以上都不适合我。我在Form_DragDrop中的断点从未被击中。
结果是,处理程序函数中的代码调用了另一个DLL的静态函数,但加载失败(BadImageException)。此错误被默默忽略,整个事件处理程序只是没有被调用。