2

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

4

2 回答 2

5

这个问题很容易解决。

您必须在 DragEnter 中设置适当的效果:

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

之后正确触发 DragDrop 事件。

于 2013-12-18T19:55:51.050 回答
0

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

如果您只想移动 PictureBox...在运行时将图片框拖入 winform

最后在同一 Windows 窗体应用程序的实例之间拖放

希望这可以帮助。

于 2010-11-06T05:35:22.697 回答