2012-01-19 103 views
4

我有,應該是什麼,一個簡單的問題drag'n'drop。我有一個新的Win Form項目,其中窗體設置爲允許使用AllowDrop = true刪除。還應該提到我正在運行Windows 7 64位。Drag'n'drop到Windows窗體問題

只是可以肯定,我已經訂閱了

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

爲好。

但是,當我運行該應用程序並從我的桌面或資源管理器中拖動任何東西時,它會用鼠標指針圖標表示我不允許將任何文件放到它上面。

我發現了一個像這樣的(但贏Vista)的一個類似的問題,其中的問題是,Visual Studio中與管理priveleges其Windows資源管理器沒有運行。但構建應用程序並運行可執行文件導致同樣的問題。

我已經在過去做過這麼多次了,無法通過Google來解決這個問題。我錯過了什麼?

+0

可能與http://stackoverflow.com/questions/281706/drag-and-drop-from-windows-file-explorer-onto-a-windows-form-is-not-working – SliverNinja

+0

@SliverNinja - 是的,這是我所指的那個,但提出的解決方案對我來說並不適用。 – BlueVoodoo

回答

7

默認情況下,未指定拖放操作的目標拖放效果(DragDropEffects.None)。因此,在這種情況下,您的控件沒有丟棄事件。 讓控制是一個拖和拖放操作的針對特定的數據接收機應指定具體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

+0

謝謝。那就是訣竅。 – BlueVoodoo

1

您正在使用錯誤的事件,請使用DragEnter事件。

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

由於某種原因訂閱DragEnter的作品,但這不是我想要的。這意味着,只要我的鼠標指針進入表單,我就會觸發代碼。我想讓它在我釋放鼠標按鈕時被觸發。 – BlueVoodoo