Контролируют ли Control.SuspendLayout и Control.ResumeLayout счет? - PullRequest
4 голосов
/ 30 октября 2009

Я не могу придумать, как сформулировать вопрос, чтобы быть точным, но, надеюсь, мой смысл будет понятен. Контролируют ли Control.SuspendLayout и Control.ResumeLayout счет?

Другими словами, если я дважды вызываю SuspendLayout и один раз ResumeLayout, приостановлен ли макет?

Ответы [ 2 ]

8 голосов
/ 31 октября 2009

У нас мало причин зацикливаться на таком вопросе. Исходный код доступен под названием «Справочный источник». Лучший способ получить это - .NET Mass Downloader . Не каждая сборка .NET публикует свой исходный код, ваша резервная копия - почтенный Reflector .

Anyhoo, исходный код выглядит примерно так:

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...
}

Итак, ответ на ваш вопрос: да.

0 голосов
/ 30 октября 2009

Если я дважды вызову SuspendLayout и один раз ResumeLayout, приостановится ли макет?

Нет. Макет возобновлен.

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