如何防止多个背景重绘.NET winforms

时间:2009-08-11 15:50:35

标签: .net winforms image c#-3.0 background

我有一个存储在数据库中的背景图像,所以不是设置我处理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);
        }
    }

2 个答案:

答案 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