所有
我按照http://msdn.microsoft.com/en-us/library/ka0yazs1.aspx创建一个应用程序,并希望在C#WinForm中在背景上绘制一些内容。
BufferedGraphics在Form1_Load事件中启动。如果我将render方法放在鼠标单击事件中,它可以简单地清理这样的背景:
BufferedGraphicsContext myContext;
BufferedGraphics myBuffer;
private void button1_Click(object sender, EventArgs e)
{
myBuffer.Graphics.FillRegion(Brushes.Black,new Region(this.ClientRectangle));
myBuffer.Render();
}
当我将render方法放在FormLoad事件中时,它不会绘制任何东西:
private void Form1_Load(object sender, EventArgs e)
{
myContext = BufferedGraphicsManager.Current;
myBuffer = myContext.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width,this.Height));
myBuffer.Graphics.FillRegion(Brushes.Black,new Region(this.ClientRectangle));
myBuffer.Render();
}
任何人都可以找出问题所在吗?我不认为这是一个错误。
答案 0 :(得分:2)
是的,那不行。在Load事件中窗口不可见,Shown事件是您可以确定可以看到渲染内容的第一个事件。
实际上并没有解决任何问题,当表单重新绘制自己时,你将丢失任何渲染内容。仅在Paint事件中绘制内容。在构造函数中将this.DoubleBuffered属性设置为true时,您将免费获得双缓冲图形缓冲区。