OnPaint()函数 private void OnPaint(object sender, PaintEventArgs e)
        {
            System.Drawing.Graphics g = this.CreateGraphics();
            for (int x = 0; x < 15; x++)
            {
                for (int y = 0; y < 15; y++)
                {
                    if (checkerBoard[y, x] != None) DrawChess(new Point(x, y), checkerBoard[y, x]);
                }
            }
            ReDrawNextPlayerMark();
            base.OnPaint(e);
        }
 private void ReDrawNextPlayerMark()
        {
            System.Drawing.Graphics g = this.CreateGraphics();
            imageList1.Draw(g, 2, 309, 20, 20, Player);
        }

解决方案 »

  1.   

    你这是干嘛,怎么没完没了的System.Drawing.Graphics g = this.CreateGraphics();直接用e中的Griaphic
    然后 ReDrawNextPlayerMark函数中带一个参数(Graphic g),内部都操作这个g
      

  2.   

    这个是c#2008里面的代码,我在学习,可是用2010时,首先出现System.Drawing.Graphics g = this.CreateGraphics();这句的StackOverFlowException,如果注释base.OnPaint();这句就能绘制出图形来,可是操作窗口时却看不到图形变化
      

  3.   

    OnPaint()函数内部调用base.OnPaint();在2010里边能用吗?这个是个死循环吗?
      

  4.   


    循环了在Onpaint中不能使用this.CreateGraphics();
    通过this.CreateGraphics();取得的对象再绘制的时候,会导致不断发生wm_paint消息
    wm_paint消息的不断重复会导致不断的调研OnPaint()方法。。
    这里有个无效区域和有效区域的概念在C#中:OnPaint对应SDK的BeginPaint()和EndPaint()
            CreateGraphics()对应SDK的GetDC()