如果目标图片框已有图像,请取消拖动

时间:2014-05-11 13:27:38

标签: c# drag-and-drop

我正在做一个drapandrop,它的工作很好。但是每当我尝试将图像拖动到已经包含图像的图片时,我希望它给出一条消息,这将无效......当我点击图像并将其拖动到它所来自的同一图片框时(如我点击picturebox1并将其放在picturebox1上它只是空白),它只是消失了.public partial class Form1:Form

    public Form1()
    {
        InitializeComponent();

        pictureBox1.AllowDrop = true;
        pictureBox2.AllowDrop = true;
        pictureBox3.AllowDrop = true;
        pictureBox4.AllowDrop = true;
        pictureBox5.AllowDrop = true;
        pictureBox6.AllowDrop = true;
    }

    void pictureBox_MouseDown(object sender, MouseEventArgs e)
    {
        DoDragDrop(sender, DragDropEffects.Move);

    }

    void pictureBox_DragEnter(object sender, DragEventArgs e)
    {
        e.Effect = DragDropEffects.Move;
    }

    void pictureBox_DragDrop(object sender, DragEventArgs e)
    {
        PictureBox pb = e.Data.GetData(typeof(PictureBox)) as PictureBox;

        if (pb.Image != null) 
        {
            ((PictureBox)sender).Image = pb.Image;
            pb.Image = null;           

        }
        else
        {                
            MessageBox.Show("The picturebox already contains an image.");
        }
     }
}

}

1 个答案:

答案 0 :(得分:0)

pb是对正在拖动的PictureBox的引用。由于您正在拖动您正在拖动的同一个PictureBox,pbsenrder都引用相同的PictureBox,因此pb.Image = null;代码行正在清除PictureBox中的图像。你需要在条件中添加一个pb与发送者不同的检查,如下所示: if (pb.Image != null && !pb.Equals(sender))

修改

基本上,您应该使用DragEnter事件。如果PictureBox已包含图像,则可以将e.Effect设置为DragDropEffects.None。这也将为您首先描述的问题提供更好的解决方案。