DoubleBuffered 与 SetStyle

DoubleBuffered versus SetStyle

我得到了相互矛盾的 Google 结果,我想知道是否可以澄清一下?

我有:

typeof(TableLayoutPanel)
   .GetProperty("DoubleBuffered",
      System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
    .SetValue(tableLayoutPanel, true, null);

typeof(TableLayoutPanel)
    .GetMethod("SetStyle",
      System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
      .Invoke(tableLayoutPanel, new object[] { ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint, true });

但有人告诉我,如果我将 DoubleBuffered 设置为 true,我就不需要手动将 3 种样式设置为系统将在内部执行此操作。目前我正在打电话。

来自 Reference Source 这里是 DoubleBuffered 属性 的实现:

protected virtual bool DoubleBuffered {
    get {
        return GetStyle(ControlStyles.OptimizedDoubleBuffer);
    }
    set {
        if (value != DoubleBuffered) {
            if (value) {
                SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, value);
            }
            else {
                SetStyle(ControlStyles.OptimizedDoubleBuffer, value);
            }
        }
    }
}

(注意属性是继承的,所以要回到Controlclass才能找到。)