我正在尝试创建一个可以删除文件/文件夹的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事件会触发。我错过了什么?
答案 0 :(得分:22)
您的DragDropEffect
设置得恰当吗?尝试将其放在DragEnter事件处理程序方法中:
private void Form1_DragEnter(object sender, DragEventArgs e)
{
Console.WriteLine("DragEnter!");
e.Effect = DragDropEffects.Copy;
}
默认设置为DragDropEffects.None
,因此Drop事件不会触发。
答案 1 :(得分:9)
对于那些会阅读此内容的人,因为上述提示不起作用。
请注意,如果您运行Visual Studio或您的应用程序"作为管理员"那么Drag& Drop将无法正常工作如此处所述:https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/2164233-fix-drag-and-drop-to-open-file-when-running-as-adm
答案 2 :(得分:4)
尝试在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
答案 3 :(得分:4)
不要忘记在表单的属性中将 AllowDrop 更改为" True"你的代码可能没什么问题但是如果这个属性没有启用,那么它就不会工作了。默认设置为false。
答案 4 :(得分:0)
您是否编写过拖动对象的MouseDown和MouseMove事件。
答案 5 :(得分:0)
另一个非常棘手且棘手的问题可能是您已覆盖OnHandleCreated
,但忘记调用基本实现。然后,您的应用程序无法设置所需的内部窗口设置以尊重您的AllowDrop
属性。
,请务必在覆盖中拨打base.OnHandleCreated(e)
,然后就可以了。
答案 6 :(得分:0)
尽管将AllowDrop设置为true,我也遇到了这个令人困惑的问题!
在我的Windows窗体应用程序(VS2017)中,我必须确保设置了一个有效的启动对象:例如myprojectname.Program,一切都很好!
答案 7 :(得分:0)
我指定了一个命令行,该命令行指向不再存在的文件。不知何故阻止了阻力进入射击。一旦删除它,一切就再好了。