C#

[ C# ] SuspendLayout, ResumeLayout - 폼/컨트롤의 레이아웃 계산을 일시 중단하기

채린.__. 2025. 5. 21. 10:03

SuspendLayout() : 윈폼(Windows Forms)에서 폼이나 컨트롤의 레이아웃 논리를 일시 중지하는 메서드. 컨트롤들을 추가하거나 위치, 크기를 변경할 때 불필요한 리렌더링과 깜빡임을 방지하고 성능을 향상시키기 위해 사용된다.


🧠 요약 정의

this.SuspendLayout();
this.panel1.SuspendLayout();
  • 컨트롤의 레이아웃 계산을 일시 중단
  • 다수의 속성 변경, 컨트롤 추가 작업 후 ResumeLayout()으로 다시 활성화

🧩 언제 사용하나요?

  • 여러 컨트롤을 한꺼번에 추가하거나 수정할 때
  • 폼 로딩 시 많은 UI 변경이 있을 때
  • 레이아웃 중복 계산을 방지하고 속도 및 깜빡임을 줄이고 싶을 때

✅ 예시

this.SuspendLayout();

Button btn1 = new Button();
btn1.Text = "Button1";
btn1.Location = new Point(10, 10);

Button btn2 = new Button();
btn2.Text = "Button2";
btn2.Location = new Point(10, 50);

this.Controls.Add(btn1);
this.Controls.Add(btn2);

this.ResumeLayout();         // 기본값 false (자동 레이아웃 갱신 X) True로 설정하면 바로  레이아웃 갱신
this.PerformLayout();        // 레이아웃 강제 적용

또는 한 줄로도 많이 쓴다:

this.ResumeLayout(true);   // true면 PerformLayout()을 자동 호출함

🔄 관련 메서드 요약

메서드 설명

SuspendLayout() 레이아웃 로직 일시 중단
ResumeLayout() 레이아웃 로직 다시 시작
PerformLayout() 수동으로 레이아웃 강제 적용

 


💡 실전 팁

  • SuspendLayout()은 Controls.Add(), Size, Location, Dock, Anchor 등을 여러 번 설정할 때 wrapping해서 사용하면 좋다.
  • ResumeLayout(true)만 써도 대부분의 경우 충분하다.
  • 모든 컨트롤 수정이 끝난 후에만 ResumeLayout() 호출해야 제대로 동작한다.