在表单上拖放后删除图像

时间:2014-07-07 15:38:21

标签: c# winforms

我试图删除一个图像,一旦它被拖放到Windows窗体上。以下是我处理拖放的方法:

private void OnDrop(object sender, DragEventArgs e)
    {
        var paths = (string[])e.Data.GetData(DataFormats.FileDrop);

        Bitmap bm = new Bitmap(paths[0]);

        var newPath = paths[0].Substring(paths[0].LastIndexOf("\\") + 1);
        bm.Save(newPath);

        pictureEdit1.Image = new Bitmap(newPath);
    }

    private void OnDragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop))
        {
            e.Effect = DragDropEffects.Copy;
        }
    }

如果我尝试从Windows资源管理器中删除原始图像,我会得到"此文件正在使用"错误。我曾尝试在bm位图上调用Dispose,但这似乎没有帮助。

编辑:为了澄清,当我调用Dispose时,我在bm.Save(newPath部分之后立即调用它,但仍然给出了我提到的错误。

2 个答案:

答案 0 :(得分:1)

尝试将位图包装在如下所示的使用块中。

private void OnDrop(object sender, DragEventArgs e)
{
    var paths = (string[])e.Data.GetData(DataFormats.FileDrop);

    using(var bm = new Bitmap(paths[0]))
    {
        var newPath = paths[0].Substring(paths[0].LastIndexOf("\\") + 1);
        bm.Save(newPath);
    }
    // using block is all done, handle should be released. delete that bad boy.
    File.Delete(paths[0]); 

    pictureEdit1.Image = new Bitmap(newPath);
}

答案 1 :(得分:0)

这对VS来说是个打嗝。我重新添加了Dispose逻辑并得到了同样的错误。最后我关闭VS并重新启动它,再次尝试并且它有效。