Контролируют ли Control.SuspendLayout и Control.ResumeLayout счет?
Я не могу придумать, как сформулировать вопрос, чтобы быть точным, но, надеюсь, мой смысл будет ясен. Контролируют ли Control.SuspendLayout и Control.ResumeLayout счет?
Иными словами, если я дважды вызываю SuspendLayout и один раз ResumeLayout, приостановится ли макет?
2 ответа
Решение
Там мало причин, чтобы застрять в вопросе, как этот. Исходный код доступен, под названием "Справочный источник". Лучший способ получить это - .NET Mass Downloader. Не каждая сборка.NET публикует свой исходный код, ваша резервная копия - почтенный Reflector.
В любом случае, исходный код выглядит примерно так:
private byte layoutSuspendCount;
public void SuspendLayout() {
layoutSuspendCount++;
if (layoutSuspendCount == 1) OnLayoutSuspended();
}
public void ResumeLayout() {
ResumeLayout(true);
}
public void ResumeLayout(bool performLayout) {
if (layoutSuspendCount > 0) {
if (layoutSuspendCount == 1) OnLayoutResuming(performLayout);
layoutSuspendCount--;
if (layoutSuspendCount == 0 && performLayout) {
PerformLayout();
}
}
}
internal void PerformLayout(LayoutEventArgs args) {
if (layoutSuspendCount > 0) {
//...
return;
}
//etc...
}
Итак, ответ на ваш вопрос: да.
Если я дважды вызову SuspendLayout и один раз ResumeLayout, приостановится ли макет?
Нет. Макет возобновлен.