2010-11-06 141 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