나름대로 공부를 했다고해도 자꾸 잊게 되더라..
여튼 이번엔 C# winform에서 쓰이는 SuspendLayout과 ResumeLayout (PerformLayout)
관련해서
[C# winform] SuspendedLayout & ResumeLayout
UI 컨트롤의 레이아웃 업데이트를 효율적으로 관리하기 위해 사용되며, 이를 통해 불필요한 리소스 사용을 줄이고 성능을 최적화할 수 있다.
SuspendLayout
- 목적: 레이아웃 업데이트를 일시적으로 중단.
- 여러 컨트롤을 추가하거나 크기 및 속성을 변경하는 작업 중에 레이아웃 업데이트가 계속해서 발생하는 것을 방지.
- 성능 향상: 잦은 레이아웃 업데이트로 인한 성능 저하를 줄인다.
ResumeLayout, PerformLayout
- 목적: 중단된 레이아웃 업데이트를 다시 시작.
- 파라미터:
- true: 레이아웃이 즉시 강제로 갱신.
- 이 옵션은 변경 사항이 즉시 반영되어야 할 때 사용.
- true: 레이아웃이 즉시 강제로 갱신.
this.SuspendLayout(); // 레이아웃 중지
// 컨트롤 추가 및 속성 변경
Button button1 = new Button();
button1.Text = "Click Me";
button1.Size = new Size(100, 50);
button1.Location = new Point(10, 10);
this.Controls.Add(button1);
this.ResumeLayout(true); // 레이아웃 즉시 갱신
- false: 레이아웃 갱신을 지연합니다.
- 변경이 완료된 후에 명시적으로 PerformLayout을 호출해서 갱신해야 한다.
- 대규모 작업 후 갱신을 제어하고 싶을 때 사용
this.SuspendLayout(); // 레이아웃 업데이트 중지
// 컨트롤 추가 및 속성 변경
button1.Size = new Size(100, 50);
button1.Location = new Point(10, 10);
this.Controls.Add(button1);
button2.Size = new Size(100, 50);
button2.Location = new Point(120, 10);
this.Controls.Add(button2);
this.ResumeLayout(false);
this.PerformLayout(); // 필요한 경우 강제로 레이아웃 갱신
주요 포인트
- 언제 사용하는가?
- 폼이나 패널에 많은 컨트롤을 추가하거나 변경하는 경우.
- 여러 컨트롤의 크기나 위치를 동적으로 변경할 때.
- 화면이 깜빡이는 현상을 방지하고 작업 효율성을 높이기 위해.
- 중첩 가능
SuspendLayout을 여러 번 호출한 경우, ResumeLayout을 동일한 횟수만큼 호출해야 레이아웃 업데이트가 재개된다. - 주의사항
- SuspendLayout과 ResumeLayout은 같은 컨트롤에 대해 호출해야 한다.
- 레이아웃 갱신을 잊지 않도록 항상 ResumeLayout을 호출하는 것이 중요하다.
많은 컨트롤을 동적으로 추가하는 상황
this.SuspendLayout(); // 레이아웃 중지
for (int i = 0; i < 10; i++) {
Button btn = new Button();
btn.Text = $"Button {i + 1}";
btn.Size = new Size(100, 30);
btn.Location = new Point(10, i * 40); // 버튼 위치 동적으로 계산
this.Controls.Add(btn);
}
this.ResumeLayout(true); // 레이아웃 재개 및 갱신
기초적인 내용이지만 다시 한 번 봐볼만한 내용.
이번 프로젝트에서 동적으로 컨트롤들을 다루는 내용이 있다보니...
'프로그래밍&IT > C#' 카테고리의 다른 글
NamedPipe 사용해서 Process간에 데이터 전송 (0) | 2025.01.09 |
---|---|
TextBox에 숫자만 입력하기 & 3자리마다 콤마(,) 찍기 (1) | 2024.10.15 |
스레드 동기화를 위한 동기화 객체들 (0) | 2024.09.23 |
C# 윈폼에서 사용할 무료 차트 컴포넌트 (1) | 2024.09.03 |
object의 DBNull처리 & List 마지막부터 가져오기 (0) | 2024.08.17 |