C#从一个图片框拖放到另一个图片框中

我正在使用C#在visual studio 2012中工作,我需要将一个图片框拖到另一个图片框中,基本上用拖动图片框图像替换目标图片框图像。

我该怎么做呢?

请具体并尝试尽可能简单地解释。 我对编程非常陌生,有点绝望所以请耐心等待我。

Drag + drop隐藏在PictureBox控件上。 不知道为什么,它运作得很好。 这里可能的指导是,用户不会明白您可以在控件上放置图像。 你必须对此做些什么,至少将BackColor属性设置为非默认值,以便用户可以看到它。

Anyhoo,您需要在第一个图片框上实现MouseDown事件,以便您可以单击它并开始拖动:

private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { var img = pictureBox1.Image; if (img == null) return; if (DoDragDrop(img, DragDropEffects.Move) == DragDropEffects.Move) { pictureBox1.Image = null; } } 

我假设您想要移动图像,如果需要复制,必要时进行调整。 然后,您将必须在第二个图片框上实现DragEnter和DragDrop事件。 由于属性是隐藏的,您应该在窗体的构造函数中设置它们。 像这样:

  public Form1() { InitializeComponent(); pictureBox1.MouseDown += pictureBox1_MouseDown; pictureBox2.AllowDrop = true; pictureBox2.DragEnter += pictureBox2_DragEnter; pictureBox2.DragDrop += pictureBox2_DragDrop; } void pictureBox2_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Bitmap)) e.Effect = DragDropEffects.Move; } void pictureBox2_DragDrop(object sender, DragEventArgs e) { var bmp = (Bitmap)e.Data.GetData(DataFormats.Bitmap); pictureBox2.Image = bmp; } 

这允许您将图像从另一个应用程序拖动到框中。 我们称之为function。 如果要禁用此选项,请使用bool标志。

您可以使用鼠标进入和离开事件来轻松完成此操作。例如,您有两个图片框pictureBox1和pictureBox2 …并且您想要从图片框1拖动图像并将其放到图片框2上做这样的事情……

  private void pictureBox2_MouseUp(object sender, MouseEventArgs e) { if (a == 1) { pictureBox1.Image = pictureBox2.Image; a = 0; } } private void pictureBox1_MouseEnter(object sender, EventArgs e) { a = 1; } 

其中’a’只是一个锁或键,用于检查鼠标是否已进入我们想要放置此图像的控件…希望它帮助了……为我工作

汉斯的回答让我找到了正确的解决方案。 该答案的问题是将DoDragDrop置于MouseDown将阻止MouseClick事件触发。

这是我的解决方案:

 private void PictureBox_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { var pb = (PictureBox)sender; if (pb.BackgroundImage != null) { pb.DoDragDrop(pb, DragDropEffects.Move); } } } private void PictureBox_DragEnter (object sender, DragEventArgs e) { e.Effect = DragDropEffects.Move; } private void PictureBox_DragDrop (object sender, DragEventArgs e) { var target = (PictureBox)sender; if (e.Data.GetDataPresent(typeof(PictureBox))) { var source = (PictureBox)e.Data.GetData(typeof(PictureBox)); if (source != target) { // You can swap the images out, replace the target image, etc. SwapImages(source, target); } } } 

我的GitHub上的完整工作示例。