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

use*_*165 8 c# drag-and-drop picturebox

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

我该怎么做呢?

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

Han*_*ant 10

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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我假设您想移动图像,如果需要复制,必要时进行调整.然后,您将必须在第二个图片框上实现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;
    }
Run Code Online (Sandbox Code Playgroud)

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


小智 0

您可以使用鼠标进入和离开事件轻松完成此操作。例如,您有两个图片框 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;
}
Run Code Online (Sandbox Code Playgroud)

其中“a”只是一个锁或钥匙,用于检查鼠标是否已进入我们想要将此图像放置在其上的控件。希望它有帮助,对我有用。