【问题标题】:WinForms - Does the Form.DoubleBuffered property influence controls placed on that form?WinForms - Form.DoubleBuffered 属性是否影响放置在该表单上的控件?
【发布时间】:2010-10-29 00:33:45
【问题描述】:

Form 具有 DoubleBuffered 属性(bool,继承自 Control)。

如果设置为 true,是否所有放置在窗体上的控件都由于位于窗体上而以双缓冲方式绘制到屏幕上?还是您需要担心自己的 DoubleBuffered 属性?

【问题讨论】:

  • 查看我的编辑以了解解决此问题的可能方法。

标签: c# .net winforms doublebuffered


【解决方案1】:

据我所知,不,双缓冲不会延续到子控件。您需要为每个单独设置它。我会谷歌它,看看我是否能找到证明/反驳这一点的来源......

编辑:发现这个:http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic17173.aspx

只是想到了一个快速破解方法来解决这个问题。基本上,使用反射来获取“DoubleBuffered”属性,然后设置它:

public static class Extensions
{
    public static void EnableDoubleBuferring(this Control control)
    {
        var property = typeof(Control).GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
        property.SetValue(control, true, null);
    }
}

然后,在您的表单代码中,执行以下操作:

    public Form1()
    {
        InitializeComponent();
        this.DoubleBuffered = true;
        foreach (Control control in this.Controls)
        {
            control.EnableDoubleBuferring();
        }
    }

【讨论】:

  • 谢谢。这听起来有点像 PITA。
  • 再次感谢。通常看起来是一种快速处理非公开事物的便捷方法。
  • 在 2018 年仍然有用:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2010-10-16
  • 2011-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
相关资源
最近更新 更多