태그: AfterSelect 이벤트

이번에는 계층적으로 자료를 표시할 수 있는 TreeView 사용법을 알아봅시다.

이번 실습에서는 트리 뷰의 부모의 첫번째 자식, 마지막 자식으로 노드를 추가하는 방법과 선택한 노드의 이전, 이후로 추가하는 방법, 노드를 삭제하는 방법 및 트리의 항목을 펼치거나 축소하는 방법 등을 알아볼게요.

[그림 2.11] 실행화면 및 컨트롤 배치
[그림 2.11] 실행화면 및 컨트롤 배치
 다음은 Form1의 자식 컨트롤 Name 및 형식입니다.

No Name 컨트롤 형식 설명
1 tv_demo TreeView 데모 트리 뷰
2 tbox_parent TextBox 부모 노드 텍스트 박스
3 tbox_child TextBox 자식 노드 텍스트 박스
4 btn_add_first Button 부모의 첫번째 자식으로 추가 버튼
5 btn_add_last Button 부모의 마지막 자식으로 추가 버튼
6 lbox_brothers ListBox 선택한 노드의 자식 노드 목록
7 btn_add_prev Button 선택한 자식의 이전 노드로 추가 버튼
8 btn_add_next Button 선택한 자식의 다음 노드로 추가 버튼
9 btn_expand Button 트리 뷰 펼치기
10 btn_collapse Button 트리 뷰 축소하기
11 btn_remove Button 선택 노드 제거하기

트리 뷰의 AfterSelect 이벤트 핸들러를 등록합니다.

선택 항목의 자식들을 표시할 lbox_brothers의 아이템 항목을 지워줍니다.

트리 뷰에는 선택한 노드를 SelectedNode 속성으로 가져오기 할 수 있습니다.

선택한 노드가 없을 때 tbox_parent의 Text 속성을 비워줍니다.

그리고 tbox_paretn의 Tag에는 트리 뷰의 TopNode로 설정합시다.

선택한 노드가 없으므로 삭제 버튼은 비활성화 합니다.

선택한 노드가 있다면 tbox_parent의 Text 속성과 Tag 속성을 선택한 노드로 설정합니다.

선택한 노드가 있기 때문에 삭제 버튼을 활성화합니다.

그리고 선택한 노드의 Nodes 컬렉션에 있는 자식 노드들을 lbox_brothers 항목에 추가합니다. 여기서 lbox_brothers라고 명명한 이유는 추가할 노드의 형제들이라는 의미입니다. 물론 선택한 노드의 자식들이죠.

첫번째 자식으로 추가 버튼의 클릭 이벤트 핸들러를 등록합니다.

tbox_parent.Tag에 설정해 두었던 TreeNode를 참조합니다.

만약 node가 null이면 트리 뷰의 Nodes 컬렉션에 추가합니다. 원하는 위치에 추가할 때는 Insert 메서드를 사용합니다.

node가 null이 아니면 node의 Nodes 컬렉션에 추가하고 노드를 펼칩니다.

tbox_childe의 Text 속성을 빈 문자열로 설정합니다.

마지막 자식으로 추가 버튼의 클릭 이벤트 핸들러를 등록합시다.

tbox_parent의 Tag 속성에 설정한 TreeNode를 참조합니다.

마지막 자식으로 추가할 때는 Add 메서드를 호출합니다.

lbox_brothers 리스트 박스의 선택 항목 변경 이벤트 핸들러를 등록합시다.

선택 항목이 있는지 여부에 따라 이전 자식으로 추가 버튼과 다음 자식으로 추가 버튼의 활성화 및 비활성화 여부를 설정합니다.

이전 자식으로 추가 버튼의 클릭 이벤트 핸들러를 등록합시다.

lbox_brothers의 선택 항목을 TreeNode 형식으로 참조합니다.

트리 노드에는 Parent 속성으로 부모 노드를 가져오기할 수 있습니다.

부노 모드의 Nodes 컬렉션에 선택한 형재 노드의 Index에 추가합니다.

다음 자식으로 추가 버튼의 클릭 이벤트 핸들러를 등록합시다.

다음 자식으로 추가하기 위해 선택한 형재 노드의 Index+1 위치에 추가합니다.

펼기기와 축소하기 버튼의 클릭 이벤트 핸들러를 등록합시다. 펼치기와 축소하기를 위해 트리 뷰에서는 ExpandAll 메서드와 CollapseAll 메서드를 제공합니다.

삭제 버튼의 클릭 이벤트 핸들러를 등록합시다.

노드를 제거할 때는 노드 자신의 Remove 메서드를 사용합니다. 여기서는 선택한 노드를 제거할 것이므로 SelectedNode 속성에 있는 노드 개체를 Remove 합니다.

선택한 노드를 제거했으니 tbox_parent의 Tag 속성과 Text 속성을 지워줍니다.

▷Form1.cs