把 doubolebuffered设置为ture时图片就无法显示。只有当窗体被系统重绘的时候才能看到bitmap图片
下面是OnPaint函数
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
  {
      Graphics graphics = Graphics.FromHwnd(this.Handle);
      graphics.DrawImageUnscaled(bitmap, x, y);//bitmap是一个位图
  }
而doubolebuffered设置为false时图片可以正常显示,不过会闪烁。所以想用双缓存。
高手指点一下……

解决方案 »

  1.   

    初始化是加上这句
    this.SetStyle(ControlStyles.ResizeRedraw, true);
      

  2.   

    或者SetStyle(ControlStyles.ResizeRedraw | ControlStyles.Opaque, true);
      

  3.   

    this.SetStyle(ControlStyles.ResizeRedraw,   true); 试了,没用!
    this.SetStyle(ControlStyles.ResizeRedraw   ¦   ControlStyles.Opaque,   true);更不行,连我的背景都没了!
      

  4.   

    怎么最近的提问老是没有满意的答案呢!难道CSDN真的没有高手了吗!!!
      

  5.   

    使用双缓冲后画图的函数是不变的,但是在Paint事件或OnPaint里应使用e.Graphics来绘图,而不能另外建立Graphics对象:改如下:
    protected   override   void   OnPaint(System.Windows.Forms.PaintEventArgs   e) 
        { 
                e.Graphics.DrawImageUnscaled(bitmap,   x,   y);//bitmap是一个位图 
        } 
      

  6.   

    难道CSDN真的没有高手了吗!!!
    --------
    现在确实太少了。都不来了。
      

  7.   

    在打开双缓冲的情况下,系统会在内部建立一个缓冲来临时对图像绘制,待会制完成后一次呈现到界面上,因此,程序员要做的,仅是打开双缓冲选项(使用SetStyle或doubolebuffered设置True),然后再正常的进行绘制,这时和没有特别之处,但不能再使用建立Graphics的方法来建立绘图对象,而应使用系统提供的e.Graphics来绘图。否则没有效果!
      

  8.   

    楼上的正解,我以前也是遇到过这个问题,后来发现了改用e里面的graphics就ok了