【问题标题】:Drag'n'drop to a Windows form issue拖放到 Windows 窗体问题
【发布时间】:2012-02-14 06:18:44
【问题描述】:

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

为了确定,我已经订阅了

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

也是。

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

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

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

【问题讨论】:

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


【解决方案1】:

默认情况下,不指定拖放操作的目标放置效果 (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

【讨论】:

    【解决方案2】:

    你使用了错误的事件,使用 DragEnter 事件。

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

    【讨论】:

    • 出于某种原因订阅 DragEnter 有效,但这不是我想要的。这意味着,只要鼠标指针进入表单,我就会触发代码。我希望在我释放鼠标按钮时触发它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多