C#: делает ли ResumeLayout (true) то же самое, что ResumeLayout(false) + PerformLayout ()?

Я посмотрел на сгенерированный дизайнером код Forms и UserControls, и в InitializeComponent() метод они всегда начинают с

    this.SuspendLayout();

и

    this.ResumeLayout(false);
    this.PerformLayout();

но из того, что я вижу в документации MSDN этих методов, не заканчивая

    this.ResumeLayout(true); // Or just this.ResumeLayout()

сделать то же самое? Или я что-то пропустил?

спрашивая, потому что я буду добавлять кучу элементов управления в другой метод, и думал, что я должен сделайте процедуру suspend-resume приятной и эффективной. Но не могу понять, в чем причина этих двух вызовов методов, когда можно, казалось бы, просто использовать один...

2 ответов


используя отражатель:

this.ResumeLayout() is equal to this.ResumeLayout(true)

но

this.ResumeLayout(true) is not equal to this.ResumeLayout(false) + this.PerformLayout()

причина:
Когда ResumeLayout вызывается с false, существует коллекция элементов управления, которая проходит цикл и LayoutEngine вызывает InitLayout на каждом из элементов управления в макете.


SuspendLayout

при добавлении нескольких элементов управления родительский контроль рекомендуется вызов метода SuspendLayout перед инициализацией контроля добавлен. После добавления элементов управления родительского контроля, называют Метод ResumeLayout. Эта воля увеличение производительности приложения со многими элементами управления.

PerformLayout

оно принуждает управление К применить макет логика для всех дочерних элементов управления. Если the SuspendLayout метод позвонил перед вызовом PerformLayou t метод,планировка событие подавляется. The планировка событие можно подавить с помощью SuspendLayout и Методы ResumeLayout.

MSDN Link -Метод PerformLayout