我刚开始使用.net紧凑框架。我想在屏幕上绘制一个Sudoku字段。所以我放下PictureBox
并为Paint
事件定义了一个方法:
private void pictureBoxPlayfield_Paint(object sender, PaintEventArgs e)
{
// use e.Graphics to draw the grid, numbers and cursor
}
这可行,但您可以看到绘制网格。所以我的问题是,创建这样一个自定义控件的正确/更好的方法是什么?有没有办法启用双缓冲?
答案 0 :(得分:2)
Compact Framework中没有内置的双缓冲支持。您可以自己添加它,PictureBox已经支持Image属性。在构造函数中创建一个位图并将其分配给Image。您不再需要Paint事件,PictureBox提供的事件已将其绘制到屏幕上。
每当图像需要更改时,使用Graphics.FromImage()创建一个Graphics对象,传递PB的Image并绘制你的东西。调用PB的Invalidate()方法告诉它需要重绘图像。如果你仍然看到闪烁,请覆盖PB的OnPaintBackground()方法,什么都不做。
唯一的另一个考虑因素是处理调整大小,你需要一个更大或更小的位图。不太确定游戏是否必要。