int flag = 0;
        Point pa1, pa2;
        Point pb1, pb2;               
                if (flag == 1)
                {
                    pa2.X = e.X;
                    pa2.Y = pa1.Y + pa2.X - pa1.X;
                    this.Show();
                    Pen pen = new Pen(Color.Red, 1);
                    dc.DrawEllipse(pen, pa1.X, pa1.Y, pa2.X - pa1.X, pa2.Y - pa1.Y);
                    pen.Dispose();
                }
                if (flag == 2)
                {
                    pb2.X = e.X;
                    pb2.Y = pb1.Y + pb2.X - pb1.X;
                    this.Show();
                    Pen pen = new Pen(Color.Blue, 1);
                    dc.DrawEllipse(pen, pb1.X, pb1.Y, pb2.X - pb1.X, pb2.Y - pb1.Y);
                    pen.Dispose();
                }此段代码为什么在单独的一个Form里面就可以运行,但是当这个Form是另一个Form的子窗体时就会发生:GDI+发生一般性的错误。发生错误的地方是:dc.DrawEllipse(pen, pa1.X, pa1.Y, pa2.X - pa1.X, pa2.Y - pa1.Y);
dc.DrawEllipse(pen, pb1.X, pb1.Y, pb2.X - pb1.X, pb2.Y - pb1.Y);请各位高手指点。

解决方案 »

  1.   

    public partial class draw1 : Form
        {
            Graphics dc = null;
            int flag = 0;
            Point pa1, pa2;
            Point pb1, pb2;
            public draw1()
            {
                InitializeComponent();
                dc = this.CreateGraphics();
            }        private void draw1_MouseDown(object sender, MouseEventArgs e)
            {
                flag++;
                if (flag == 1)
                {
                    pa1.X = e.X;
                    pa1.Y = e.Y;
                }
                if (flag == 2)
                {
                    pb1.X = e.X;
                    pb1.Y = e.Y;
                }
            }        private void draw1_MouseUp(object sender, MouseEventArgs e)
            {
                try
                {
                    if (flag == 1)
                    {
                        pa2.X = e.X;
                        pa2.Y = pa1.Y + pa2.X - pa1.X;
                        this.Show();
                        Pen pen = new Pen(Color.Red, 1);
                        dc.DrawEllipse(pen, pa1.X, pa1.Y, pa2.X - pa1.X, pa2.Y - pa1.Y);
                        pen.Dispose();
                    }
                    if (flag == 2)
                    {
                        pb2.X = e.X;
                        pb2.Y = pb1.Y + pb2.X - pb1.X;
                        this.Show();
                        Pen pen = new Pen(Color.Blue, 1);
                        dc.DrawEllipse(pen, pb1.X, pb1.Y, pb2.X - pb1.X, pb2.Y - pb1.Y);
                        pen.Dispose();
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
    }
    全部代码