none
在picturebox上画图报错 RRS feed

  • 问题

  • 我在picturebox控件(名为picBoard)上的Image画图,并保存,但出现了两个问题

    1.保存一次后,再想画图是就不能画了,会报错:


    2.保存一次后,点击最小化,再恢复,程序控件窗口黑了,并报错:


    不知道原因,请帮忙解释一下,谢谢

    代码:

            private void picBoard_MouseMove(object sender, MouseEventArgs e)

            {

                if (shouldPaint)

                {

                    Point nowPoint = new Point(e.X, e.Y);

                    Graphics graphics = picBoard.CreateGraphics();

                    Graphics picGraphics = Graphics.FromImage(picBoard.Image);

     

                    picGraphics.DrawLine(magicPen, Front, nowPoint);

                    Front.X = e.X;

                    Front.Y = e.Y;

                    graphics.DrawImage(picBoard.Image, 0, 0);

                    picBoard.BackgroundImage = picBoard.Image;

                    graphics.Dispose();

                    picGraphics.Dispose();

                }

            }

     

            private void saveSToolStripMenuItem_Click(object sender, EventArgs e)

            {

                            using (SaveFileDialog saveFileDialog1 = new SaveFileDialog())

                {

                    saveFileDialog1.Title = "保存";

                    saveFileDialog1.InitialDirectory = @"C:\";

                    saveFileDialog1.Filter = "图片(*.png)|*.png|图片(*.jpg)|*.jpg|图片(*.gif)|*.gif";

                    saveFileDialog1.AddExtension = true;

                    if (saveFileDialog1.ShowDialog() == DialogResult.OK)

                    {

                        using (Image img = this.picBoard.Image)

                        {

                            img.Save(saveFileDialog1.FileName);

                        }

                    }

                }

            }

    2011年10月28日 14:03

答案

  • 把 using 去掉。
    我也就自己的签名档哦!
    • 已标记为答案 Neal_Lee 2011年10月29日 4:21
    2011年10月29日 1:41
  • using 执行了一个类似 try-finally 的异常保护,并且在 finally 中处理了析构函数,也就是 C# 中的 IDispable 接口。

    所以一般 using 都是和 new 一起使用。

    而你的 image 在 using 结束后是还需要使用的,而在 using 结束后,你已经释放了 Image 的资源,所以在此使用时会出错。

     

    详细的 using 信息,看看 MSDN。


    我也有自己的签名档哦!
    2011年10月29日 4:27

全部回复

  • 把 using 去掉。
    我也就自己的签名档哦!
    • 已标记为答案 Neal_Lee 2011年10月29日 4:21
    2011年10月29日 1:41
  • 谢谢,已经不会出错了。

    不过,能请你解释一下为什么用using会出错吗?


    Keep practising pragramming.
    2011年10月29日 4:22
  • using 执行了一个类似 try-finally 的异常保护,并且在 finally 中处理了析构函数,也就是 C# 中的 IDispable 接口。

    所以一般 using 都是和 new 一起使用。

    而你的 image 在 using 结束后是还需要使用的,而在 using 结束后,你已经释放了 Image 的资源,所以在此使用时会出错。

     

    详细的 using 信息,看看 MSDN。


    我也有自己的签名档哦!
    2011年10月29日 4:27
  • 非常感谢,看了你的解释和MSDN,查不多明白using(){}的作用了。

    谢谢你的耐心解答。


    Keep practising pragramming.
    2011年10月29日 6:04