C #: ResumeLayout (true) делает то же самое, что ResumeLayout (false) + PerformLayout ()? - PullRequest
10 голосов
/ 27 августа 2009

Я посмотрел на сгенерированный код конструктора Form s и UserControl s, а в методе InitializeComponent() они всегда начинаются с

    this.SuspendLayout();

и заканчивается

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 27 августа 2009

Использование отражателя:

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

Но

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

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

3 голосов
/ 27 августа 2009

SuspendLayout

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

PerformLayout

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

MSDN Link - Метод PerformLayout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...