c#双缓冲按钮

时间:2011-10-15 23:37:20

标签: c# winforms doublebuffered

我最近几个月一直在做一个项目,有一个我无法解决的问题。我有一个带有控件的Windows表单。当用户更改控件大小时,app会触发sizechanged事件,然后相应地移动控件。主要的问题是按钮,因为它们有图像 - 实际上更精确 - 它们是平的,没有边框,并且上面有一个图像,它实际上是一个绘制的按钮(我不通过代码绘制它的原因是因为图像很复杂)。在某些机器上,当应用程序调整大小时,它们会开始闪烁。 Form设置为DoubleBuffered为true,我使用此函数在按钮上设置双缓冲区。

public static void SetDoubleBuffered(System.Windows.Forms.Control c)
    {
        if (System.Windows.Forms.SystemInformation.TerminalServerSession)
            return;

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

        aProp.SetValue(c, true, null);
    }

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当我遇到双缓冲问题时,这对我帮助很大。代码有点陈旧,但仍然涵盖了基础知识。

http://www.codeproject.com/KB/graphics/DoubleBuffering.aspx

希望有所帮助。 :)