c# - 拖放至 Windows 窗体问题

标签 c# .net winforms drag-and-drop windows-7-x64

我有一个关于拖放的简单问题。我有一个新的 Win Form 项目,其中的表单已设置为允许使用 AllowDrop = true 放置。还应该提到我正在运行 Windows 7 64 位。

为了确定,我已经订阅了

this.DragDrop += new System.Windows.Forms.DragEventHandler(Form1_DragDrop);

还有。

但是当我运行该应用程序并从我的桌面或资源管理器中拖动任何东西时,它会用鼠标指针图标表示我根本不允许将任何文件拖放到它上面。

我发现了一个与此类似的问题(但 Win Vista),其中的问题是 Visual Studio 以管理员权限运行,而 Windows 资源管理器则没有。但是构建应用程序并运行可执行文件会导致同样的问题。

我过去曾多次这样做,但无法用 Google 搜索我的方法来解决这个问题。我错过了什么?

最佳答案

默认情况下,未指定拖放操作的目标放置效果 (DragDropEffects.None)。因此,在这种情况下,您的控件没有放置事件。 要允许 Control 成为特定数据的拖放操作接收器,您应该指定具体的 DardDropEffect,如下所示(使用 DragEnterDragOver 事件):

void Form1_DragDrop(object sender, DragEventArgs e) {
    object data = e.Data.GetData(DataFormats.FileDrop);
}
void Form1_DragEnter(object sender, DragEventArgs e) {
    if(e.Data.GetDataPresent(DataFormats.FileDrop)) {
        e.Effect = DragDropEffects.Copy;
    }
}

相关 MSDN 文章:Performing a Drag-and-Drop Operation in Windows Forms

关于c# - 拖放至 Windows 窗体问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928611/

相关文章:

c# - Excel 互操作 COM 不关闭

时间:2019-04-01 标签:c#comboboxwinform

c# - asp.net mvc 中的动态类型转换编辑操作 : how can I handle multiple datatypes without throwing an exception?

.net - Powershell和.NET表单对象

c# - 如何将我的统一项目连接到 ec2 实例上的 mysql 服务器

c# - 为什么我必须从 IDisposable 实现 Dispose,为什么不只是一个简单的释放方法...?

c# - 转换为 .NET 引用源中的对象

c# - 我可以根据 .NET Framework 版本创建预处理器指令吗?

c# - RegisterHotKey 不适用于不可见的表单 (c#)

c# - 使用 backgroundWorker 下载文件