C# TreeView Control Overview
Windows Forms, .NET 8+
1. 무엇이 TreeView 인가?
CODE
TreeView
2. 대표 시나리오
시나리오 | 설명 |
---|---|
파일/폴더 탐색기 | 경로·퍼미션·아이콘을 노드에 부여해 데스크톱 UX 재현 |
조직도·프로세스 뷰어 | 직원 → 부서 → 본부 식 단계별 노드 바인딩 |
설정 편집기 | 레지스트리·INI 구조처럼 키/값 쌍을 다층 구조로 노출 |
데이터 드릴다운 | 주문 → 고객 → 상세항목을 점증적으로 로드하여 성능 최적화 |
3. 핵심 프로퍼티 & 이벤트
범주 | 멤버 | 한줄 요약 |
---|---|---|
데이터 | CODE Nodes | 최상위 CODE TreeNodeCollection CODE Nodes |
비주얼 | CODE ImageList CODE ImageIndex CODE SelectedImageIndex | 각 노드별 아이콘 매핑 |
UX | CODE CheckBoxes | 체크박스 트리로 변환 (다중 선택 시 유용) |
Selection | CODE AfterSelect | 노드 선택 후 동작 처리 |
편집 | CODE LabelEdit CODE BeforeLabelEdit CODE AfterLabelEdit | 인-플레이스 이름 수정 제어 |
성능 | CODE BeginUpdate() CODE EndUpdate() | 다량 노드 추가 시 리렌더 최소화 |
4. 첫 트리 만들기 – 3단계 스니펫
CSHARP
// 1. 준비
var tree = new TreeView
{
Dock = DockStyle.Fill,
CheckBoxes = true,
ImageList = imageList1 // 16×16 PNG 묶음
};
// 2. 데이터 주입
TreeNode root = tree.Nodes.Add("📁 Projects");
root.Nodes.Add("📄 ChatApp.cs");
TreeNode sub = root.Nodes.Add("📁 Medical");
sub.Nodes.Add("📄 PacsViewer.cs");
// 3. 이벤트 구독
tree.AfterSelect += (s, e) =>
{
statusLabel.Text = e.Node.FullPath; // 경로 표시
};
this.Controls.Add(tree);
Tip — 대용량 데이터:
1 000×15 노드를 그릴 때는 BeginUpdate() → 노드 추가 → EndUpdate() 순으로 감싸 CPU · UI 지연을 억제한다.
5. 고급 패턴
5-1 Lazy Loading
CSHARP
void AddPlaceholder(TreeNode parent)
{
parent.Nodes.Add(new TreeNode { Text = "Loading...", Tag = "PLACEHOLDER" });
}
tree.BeforeExpand += (s, e) =>
{
if (e.Node.Tag?.ToString() == "PLACEHOLDER")
{
e.Node.Nodes.Clear(); // 더미 제거
LoadChildren(e.Node); // 실제 DB/API 호출
}
};
- 대규모 DB 트리일 때 최초에는 더미 노드만 두고, 펼칠 때마다 필요한 자식만 로드하여 메모리 절약.
5-2 커스텀 노드 모델
TreeNode를 상속해 Id, Type, Metadata를 추가 → 도메인 의미를 노드 객체에 캡슐화하여 캐스팅 없이 속성 접근.
5-3 드래그-앤-드롭 재정렬
- tree.AllowDrop = true
- ItemDrag → DoDragDrop(e.Item, DragDropEffects.Move)
- DragOver / DragDrop 핸들러에서 GetNodeAt() 로 대상 계산 후 Parent.Nodes.Insert()
6. 베스트 프랙티스 체크리스트
- 아이콘 통일: 16×16 · 32×32 두 세트만 유지해 DPI 스케일링 오류 방지
- 접근성: ShowPlusMinus = true, 키보드 단축키(Right/Left) 설명 포함
- 가독성: 깊이 3단계를 넘으면 검색 필터나 가상 그룹 UI 제공
- 메모리: 노드 태그(Tag)에 대용량 DTO 직접 저장 X → 키 or Lazy factory로 보관
7. 결론
TreeView 컨트롤은 간단한 API, 깊이 있는 커스터마이징, 그리고 손쉬운 이벤트 모델 덕분에 여전히 WinForms 프로젝트에서 계층 UI의 사실상 표준 도구로 자리하고 있다. 위의 가이드라인을 따라 성능-친화적 로드 전략과 도메인 객체 캡슐화를 적용하면, 수천 노드도 매끄럽게 탐색할 수 있는 트리를 구현할 수 있다.