拖放在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事件确实触发。我错过了什么?
您的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)。此错误被忽略,整个事件处理程序也没有被调用。