我有一个存储在数据库中的背景图像,所以不是设置我处理OnPaint事件的表单的BackgroundImage属性,而是在每个表单的背景上绘制图像。问题是表单上的每个控件都会使父控件无效 - 表单,因此OnPaint会多次触发(12x)。即使图像在内存中,表单也会快速闪烁。我需要摆脱这种影响。我看不出如何确定哪个控件是最后一个导致父窗体重绘的方法,所以我可以只应用一次背景。有什么想法吗?
protected override void OnPaint(PaintEventArgs e)
{
if (Program.AppManager.AppBackgroundImage != null && !this.EH_BackImageNotApplicable)
{
e.Graphics.DrawImage(Program.AppManager.AppBackgroundImage, this.ClientRectangle);
}
}
答案 0 :(得分:0)
确保表单上的“DoubleBuffered”属性设置为true。
答案 1 :(得分:0)
试试这个:
SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
// OR
DoubleBufferred = true; // sets both flags
如果这没有帮助,您可以管理自己的双缓冲。寻找这样的文章:http://www.switchonthecode.com/tutorials/winforms-tutorial-manage-your-own-double-buffering