티스토리 뷰
탐색기구현1 - TreeView를 만들어보자!
- 폼 왼쪽의 트리뷰 구현
해야할일 -
내 컴퓨터의 드라이브 목록 뽑아오기
- 윈도우가 로드되었을 때 시스템 드라이브목록 가져오기
- 노드가 확장될 때 서브 디렉토리 목록 가져와서 노드에 추가하기
1. 윈도우가 로드되었을 때 시스템 드라이브 목록 가져오기 |
void Window1_Loaded(object sender, RoutedEventArgs e) { // Root 드라이브 생성 foreach (string str in Directory.GetLogicalDrives()) { try { TreeViewItem item = new TreeViewItem(); item.Header = str; item.Tag = str; item.Expanded += new RoutedEventHandler(item_Expanded); tvFolder.Items.Add(item); GetSubDirectories(item); } catch (Exception except) { Trace.WriteLine(except.Message); } } } |
2. 노드가 확장될 때 서브 디렉토리 목록 가져와서 노드에 추가하기 |
/// <summary> /// 인자로 주어진 TreeViewItem의 Tag정보(Directory Path)를 이용해 /// 서브 디렉토리를 추가 /// </summary> /// <param name="itemParent"></param> private void GetSubDirectories(TreeViewItem itemParent) { if (itemParent == null) return; if (itemParent.Items.Count != 0) return; try { string strPath = itemParent.Tag as string; DirectoryInfo dInfoParent = new DirectoryInfo(strPath); foreach (DirectoryInfo dInfo in dInfoParent.GetDirectories()) { TreeViewItem item = new TreeViewItem(); item.Header = dInfo.Name; item.Tag = dInfo.FullName; item.Expanded += new RoutedEventHandler(item_Expanded); itemParent.Items.Add(item); } } catch (Exception except) { Trace.WriteLine(except.Message); } } /// <summary> /// TreeViewItem이 펼쳐졌을 때 /// 자식 노드들의 서브 디렉토리들을 추가 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> void item_Expanded(object sender, RoutedEventArgs e) { TreeViewItem itemParent = sender as TreeViewItem; if (itemParent == null) return; if (itemParent.Items.Count == 0) return; foreach (TreeViewItem item in itemParent.Items) { GetSubDirectories(item); } } |