DragDrop事件未引发

时间:2010-11-06 05:04:22

标签: drag-and-drop raiseevent

这是一个愚蠢的问题......我正在尝试将图片框拖放到面板上。我遵循了一些例子,但它不起作用。从不引发面板的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和表单设置为true。 DragOver和MouseDown被引发。此外,当我拖动图片框时,光标变成一个禁止的圆圈,就像是一个不允许的操作。有没有办法让光标成为图片框中的图像?我不希望图片框移动,只是为了向面板添加项目。

2 个答案:

答案 0 :(得分:5)

问题很容易解决。

您必须在DragEnter中设置相应的效果:

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

在正确触发DragDrop事件之后。

答案 1 :(得分:0)

理查德,问题是拖放并不像你在这里编写的那样简单。在这里你还没有开始应该从代码开始的拖动动作,你可以在这里阅读更多关于它... http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dodragdrop(v=VS.90).aspx

如果您只想移动PictureBox ... dragging picturebox inside winform on runtime

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

希望这有帮助。