2010-11-06 106 views
1

這是一個愚蠢的問題......我試圖拖放一個圖片框到面板上。我遵循了一些示例,但它不起作用。面板的DragDrop事件從不會引發。我搜索thi網站尋找解決方案,並在一年前發現了兩個主題,但他們的解決方案無效。我創建了一個新的項目,只有這樣的代碼:未提高DragDrop事件

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      pictureBox1.MouseDown += new MouseEventHandler(pictureBox1_MouseDown); 
      panel1.DragDrop +=new DragEventHandler(panel1_DragDrop); 
      panel1.DragOver +=new DragEventHandler(panel1_DragOver); 
     } 

     private void panel1_DragOver(object sender, DragEventArgs e) 
     { 
      Console.WriteLine("DragOver"); 
     } 

     private void panel1_DragDrop(object sender, DragEventArgs e) 
     { 
      Console.WriteLine("DragDrop"); 
     } 

     private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
     { 
      Console.WriteLine("Mouse"); 
      pictureBox1.DoDragDrop(pictureBox1.Text, DragDropEffects.All); 
     } 
    } 

我還設置面板和形式真實的的AllowDrop。 DragOver和MouseDown被引發。另外,當我拖動圖片框時,光標變成禁止畫圈,就像是一個不允許的操作。有沒有辦法讓光標變成圖片框中的圖像?我不希望圖片框移動,只是爲了添加一個項目到面板。

回答

0

理查德,問題是拖放不像您在此處編碼那樣簡單。在這裏,你還沒有開始拖動運動應與代碼開始,你可以閱讀更多關於它在這裏... http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(v=VS.90).aspx

如果你只是想移動的圖片框... dragging picturebox inside winform on runtime

最後Drag and Drop between Instances of the same Windows Forms Application

希望這會有所幫助。

+1

經過幾次試驗後,我解決了關於拖拉事件不會升高的問題。其餘的工作很好。我只需將其添加到dragdrop事件即可工作。 private void canvasPanel_DragEnter(object sender,DragEventArgs e) e.Effect = DragDropEffects.Move ;; } – Amaranth 2010-11-06 23:58:03

+0

你是對的!我只是試了一下,看看你的意思。很好地完成了:-) – 2010-11-07 04:32:50

4

這個問題很容易解決。

你必須在適當的dragenter影響只是設置:

private void Form1_DragEnter(object sender, DragEventArgs e) 
{ 
    e.Effect = DragDropEffects.All; 
} 

之後DragDrop事件正確解僱。

+0

是的,這是正確的解決方案。就像我在三年前的評論中提到的那樣,我使用了DragDropEffects.Move,而不是.All,這在我的特定情況下也適用。 – Amaranth 2013-12-20 15:12:08

+0

你是上帝,我的朋友。 – Lara 2014-11-23 09:38:36