C# TreeView 컨트롤을 사용하여 윈도우 폴더 리스트를 구현 하는 방법


C# 닷넷 프로그램으로 윈폼을 개발할 때 윈도우 파일 탐색기의 폴더 목록과 같은 형태의 폴더 리스트를 구현해야 할 경우가 있습니다.
폴더에 포함된 서브 폴더까지 동일한 구조로 폴더 목록 리스트를 만들어야 할 경우 어떻게 하면 될까요?

윈폼(WinForms)의 TreeView 컨트롤을 사용하면 쉽게 파일 탐색기의 폴더 구조를 그대로 구현할 수 있습니다.

이번 글에서는 C# TreeView 컨트롤을 사용하여 윈도우 폴더 리스트를 구현 하는 방법에 대해 C# 프로그램 소스를 통해 알아보겠습니다.

C#의 TreeView로 구현한 폴더 리스트와 실제 윈도우 파일 탐색기의 폴더 리스트 비교

▼ 아래 첨부한 이미지의 왼쪽 화면 캡처는 C#에서 TreeView로 구현한 폴더 목록 리스트 입니다.
오른쪽 화면 캡처는 실제 윈도우 파일 탐색기을 열어서 본 폴더 목록 리스트 입니다.

동일한 폴더 목록이 나타나도록 구현 된 것을 확인할 수 있습니다.

C# TreeView 컨트롤을 사용하여 윈도우 폴더 리스트를 구현 하는 방법

C# TreeView 컨트롤을 사용하여 폴더를 구현하는 프로그램 소스

▼ 아래 C# 프로그램 소스는 앞 단락에서 왼쪽 화면으로 표시한 프로그램의 실제 소스 부분입니다.

using System;
using System.Drawing;
using System.Windows.Forms;
using System.IO;
using System.Collections.Generic;
using System.Diagnostics;
 
treeLoad();
 
private void treeLoad()
{
    treeDir.Nodes.Clear();
 
    //폴더 목록을 표시한 특정 폴더를 지정합니다.
    //실행 프로그램이 있는 폴더의 Document 폴더를 대상으로 하도록 지정했습니다.
    string sDirPath = System.IO.Directory.GetCurrentDirectory() + @“\Document”;
 
    TreeNode rootNode;
 
    DirectoryInfo info = new DirectoryInfo(sDirPath);
    if (info.Exists)
    {
        rootNode = new TreeNode(info.Name);
        rootNode.Tag = info;
        GetDirectories(info.GetDirectories(), rootNode);
        treeDir.Nodes.Add(rootNode);
    }
    else
    {
        info.Create();
        treeLoad();
    }
 
    List<TreeNode> Nodes = new List<TreeNode>();
    AddChildren(Nodes, treeDir.Nodes[0]);
 
    try
    {
        treeDir.SelectedNode = Nodes[0];
    }
    catch 
    {
        treeDir.SelectedNode = treeDir.Nodes[0];
    }
 
    TreeNode trn = treeDir.SelectedNode;
    if (trn != null)
    {
        trn.ExpandAll();
    }
}
 
//서브 폴더의 Node를 구성합니다. 
public void AddChildren(List<TreeNode> Nodes, TreeNode Node)
{
    string sDirPath = System.IO.Directory.GetCurrentDirectory() + @“\”;
 
    string sNode = lblSelectNode.Text;
 
    if (sNode == “.”)
        sNode = “Document”;  //(.)루트 디렉토리명을 Document로 해줌.
    else
        sNode = lblSelectNode.Text.Replace(sDirPath, “”);
 
    foreach (TreeNode thisNode in Node.Nodes)
    {
        if (thisNode.FullPath == sNode)
            Nodes.Add(thisNode);
        AddChildren(Nodes, thisNode);
    }
}
 
//서브 폴더까지 반복적으로 폴더를 추가합니다. 
private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo)
{
    TreeNode aNode;
    DirectoryInfo[] subSubDirs;
    foreach (DirectoryInfo subDir in subDirs)
    {
        aNode = new TreeNode(subDir.Name, 00);
        aNode.Tag = subDir;
        aNode.ImageKey = “folder”;
        subSubDirs = subDir.GetDirectories();
        if (subSubDirs.Length != 0)
        {
            GetDirectories(subSubDirs, aNode);
        }
        nodeToAddTo.Nodes.Add(aNode);
    }
}
 

마무리

C#에서 TreeView 컨트롤을 사용하면 비교적 쉽게 트리 형식의 구조를 구현할 수 있습니다.
예제에서는 컴퓨터의 폴더를 그대로 가져와서 보여주는 내용으로 구현했지만 용도에 따라 다양한 형식으로 Tree 구조를 만들 수가 있습니다.





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기