【问题标题】:Winforms Double Buffering turns off after minimizing formWinforms 双缓冲在最小化表单后关闭
【发布时间】:2015-09-15 08:50:27
【问题描述】:

我有一个显示多个图形的表单,为了在渲染图形时改善视觉体验,我使用了启用双缓冲的this piece of code

当我在不最小化/最大化表单的情况下执行应用程序时,双缓冲效果很好,但如果我碰巧将表单最小化并再次最大化它,现在双缓冲不再起作用,并且图形会重新绘制可见闪烁。

那么有没有办法在每次表单最小化/最大化时打开双缓冲?

【问题讨论】:

    标签: c# winforms flicker doublebuffered


    【解决方案1】:

    试试这个代码

    bool hasMinimized;
    void SizeChangedCallback(object sender, EventArgs e) {
        if ( WindowState == FormWindowState.Minimized ) {
            hasMinimized = true;
        } else {
            if ( hasMinimized ) {
                hasMinimized = false;
                /* Call SetStyle() in here */
            }
        }
    }
    

    您必须将表单的SizeChanged 事件链接到SizeChangedCallback
    像这样:

    this.SizeChanged += SizeChangedCallback;
    

    【讨论】:

    • 这段代码只控制表单的WindowState属性,不做任何与双缓冲相关的事情。我应该在哪里以及如何在您的代码中调用protected override CreateParams CreateParams 方法?
    • 如果您问的是如何拨打protected override CreateParams CreateParams,您的问题是错误的。 CreateParams 属性仅在创建表单时一次访问。要覆盖CreateParams,请打开表单的源代码并输入this code,或者您可以将/* Call SetStyle() in here */ 替换为SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
    • 希望对您有所帮助
    • 我按照您的所有指示进行操作,但闪烁方面没有任何改变。
    • 你能提供一段代码来防止闪烁吗? (表格)
    猜你喜欢
    • 2019-06-12
    • 2011-04-12
    • 2013-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    相关资源
    最近更新 更多