C#Winform 双缓冲不知道如何下手,虚心求教~!
C# 求救:窗体上有N多按钮,当更换按钮上图片时,闪屏,肿么办?双缓存不知道如何下手...
网上找了一些例子,有很多不能用:
private void Form1_Load(object sender, EventArgs e)//这里写这些 对不对呀?肿么感觉效果不明显啊
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint |
ControlStyles.AllPaintingInWmPaint,
true);
this.UpdateStyles();
}
还有在 OnPaint下面写的代码:这样写后 那个按钮图片更新得更慢了
winform 双缓冲
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);
}
[解决办法]
双缓存代码不是放在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;