【问题标题】:Double buffering control causes grey to appear双缓冲控制导致出现灰色
【发布时间】:2011-04-18 20:50:24
【问题描述】:

我有一个接受Control 并将生成的图像绘制到它的类。在我的应用程序代码中,我为此使用了Panel 控件——这似乎工作得很好,只是在重绘图像时控件上出现了很多闪烁。我认为解决方案是在控件上启用双缓冲。我正在使用以下代码执行此操作:

System.Reflection.PropertyInfo aProp =
                typeof(System.Windows.Forms.Control).GetProperty(
                    "DoubleBuffered",
                    System.Reflection.BindingFlags.NonPublic |
                    System.Reflection.BindingFlags.Instance);

            aProp.SetValue(drawControl, true, null); 

添加此代码后,图像被绘制,然后立即替换为默认的灰色按钮背景颜色 - 就像系统正在绘制我自己的内容一样。

我记得在某处看到了一个属性,它告诉系统永远不要绘制控件(这对我来说是完美的,因为我正在用内容填充整个控件),但现在我找不到它。有没有这样的属性,如果有,如何启用?

我将 C# 与 .NET 框架 4.0 版一起使用。

【问题讨论】:

    标签: c# winforms c#-4.0 doublebuffered


    【解决方案1】:

    尝试将控件上的 FlatStyle 设置为 FlatStyle.Standard,如果它当前设置为 FlatStyle.System。

    (通过反射设置 DoubleBuffered 看起来也很糟糕,但也许您出于某种原因需要这样做)

    【讨论】:

    • 当它设置为“系统”时,控制绘画的整个负载都被移交给操作系统,而 Winforms 不会参与其中。背景颜色等设计器属性不适用于 FlatStyle.System。
    猜你喜欢
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2012-02-11
    • 2019-11-01
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多