티스토리 뷰


탐색기구현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);

    }

}

 

 

반응형
댓글