【问题标题】:How to prevent multiple background repaint .NET winforms如何防止多个后台重绘.NET winforms
【发布时间】:2009-08-11 15:50:34
【问题描述】:

我有一个存储在数据库中的背景图像,因此我没有设置表单的 BackgroundImage 属性,而是处理 OnPaint 事件以在每个表单的背景上绘制图像。问题是表单上的每个控件都会使父控件无效 - 表单,因此 OnPaint 会触发多次(12x)。即使图像在内存中,表格也会很快闪烁。我需要摆脱这种影响。我看不到如何确定哪个控件是最后一个导致父窗体重绘的方法,因此我只能应用一次背景。有什么想法吗?

    protected override void OnPaint(PaintEventArgs e)
    {
        if (Program.AppManager.AppBackgroundImage != null && !this.EH_BackImageNotApplicable)
        {
            e.Graphics.DrawImage(Program.AppManager.AppBackgroundImage, this.ClientRectangle);
        }
    }

【问题讨论】:

  • 可以分享一下OnPaint方法的代码吗?
  • 刚刚添加。 OnPaint 方法在我的 FormBase 中被覆盖。如果您还需要什么,请告诉我。

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


【解决方案1】:

确保表单上的“DoubleBuffered”属性设置为 true。

【讨论】:

  • 它有所帮助,但仍然不是很好。我什至不知道有这样的事情。谢谢你。
【解决方案2】:

试试这个:

SetStyle(ControlStyles.OptimizedDoubleBuffer |
ControlStyles.AllPaintingInWmPaint, true);
// OR
DoubleBufferred = true; // sets both flags

如果这没有帮助,您可以管理自己的双缓冲。寻找这样的文章:http://www.switchonthecode.com/tutorials/winforms-tutorial-manage-your-own-double-buffering

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    相关资源
    最近更新 更多