拖放到Windows窗体问题

时间:2012-01-19 15:23:41

标签: 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运行的是管理器priveleges,Windows资源管理器不是。但是构建应用程序并运行可执行文件会导致同样的问题。

我过去曾多次这样做过,而谷歌也无法解决这个问题。我错过了什么?

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

您使用的是错误的事件,请使用DragEnter事件。

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