首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C#Winform 双缓冲不知道怎么下手,虚心求教~

2013-04-05 
C#Winform 双缓冲不知道如何下手,虚心求教~!C# 求救:窗体上有N多按钮,当更换按钮上图片时,闪屏,肿么办?双

C#Winform 双缓冲不知道如何下手,虚心求教~!


C# 求救:窗体上有N多按钮,当更换按钮上图片时,闪屏,肿么办?双缓存不知道如何下手...

网上找了一些例子,有很多不能用:


private void Form1_Load(object sender, EventArgs e)//这里写这些 对不对呀?肿么感觉效果不明显啊
        {
            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint |
                          ControlStyles.AllPaintingInWmPaint,
                          true);
            this.UpdateStyles();
        }


还有在 OnPaint下面写的代码:这样写后 那个按钮图片更新得更慢了

 protected override void OnPaint(PaintEventArgs e)
        {

            Rectangle rect = e.ClipRectangle;
            Bitmap bufferimage = new Bitmap(this.Width, this.Height);
            Graphics g = Graphics.FromImage(bufferimage);
            //这中间是不是少了什么东西?那个显示在显示器上的怎么让它先绘制到bufferimage里面啊?
            this.CreateGraphics().DrawImage(bufferimage, 0, 0);
        }
winform 双缓冲
[解决办法]
双缓存代码不是放在form里,是放在你要绘制对象所在的类里,看你的代码,双缓存应该放在button类的构造函数里

public class 你的按钮类:Button
{
  public 你的按钮类()
  {
   InitializeComponent();
 this.SetStyle(ControlStyles.OptimizedDoubleBuffer 
[解决办法]
 ControlStyles.UserPaint 
[解决办法]

                          ControlStyles.AllPaintingInWmPaint,
                          true);
            this.UpdateStyles();
  }
}


[解决办法]
OnPaint中绘制大图像会慢的,你可以在内存中先绘制I个bitmap,然后将这个bitmap作为控件的背景图

            Bitmap bmp = new Bitmap(100, 100);
            Graphics g = Graphics.FromImage(bmp);
            g.DrawString("sssss", this.Font, Brushes.Red,10,10);
            this.BackgroundImage = bmp;

热点排行