在Control的Paint事件中,我对它需要进行重绘,期间包含了很多DrawLine动作,每次执行一下DrawLine,对应的线就会在窗体上显示出来。现在我想把线一次性全部画好,再一次性显示出来,请教方法。

解决方案 »

  1.   

    呵呵double buffer可以完成你的功能,你可以在内存中生成一个bitmap,在内存中画好了再贴到窗体上去。
    网上有很多现成的代码,拿来就可以用。
      

  2.   

    恩,你可以看看愚翁的blog,上面写的非常详细
      

  3.   

    我也是刚学double buffer不久,有些好东西, 分享一下:
    实现双缓冲的具体步骤:1、在内存中建立一块“虚拟画布”:Bitmap bmp = new Bitmap(600, 600);2、获取这块内存画布的Graphics引用:Graphics g = Graphics.FromImage(bmp);3、在这块内存画布上绘图:g.FillEllipse(brush, i * 10, j * 10, 10, 10);4、将内存画布画到窗口中this.CreateGraphics().DrawImage(bmp, 0, 0);总结怎么样?是不是很简单?但是正是这个简单的操作大大提高了绘图效率,所以如果你需要进行GDI+图形编程,双缓冲技术一定要掌握,特别是在进行大量图形绘制刷新的情况下要尽量采用。
      

  4.   

    this.SetStyle( ControlStyles.AllPaintingInWmPaint ControlStyles.UserPaint ControlStyles.DoubleBuffer, true);
    试试添上这句话
      

  5.   

    SetStyle(ControlStyles.AllPaintingInWmPaint| ControlStyles.UserPaint|ControlStyles.DoubleBuffer,true);
      

  6.   

    恩 dyw31415926(dyw31415926)说的很详细,不用我来添乱了。:-)
      

  7.   

    SetStyle(ControlStyles.AllPaintingInWmPaint| ControlStyles.UserPaint|ControlStyles.DoubleBuffer,true);没有用