DevExpress를 사용하여 로컬 드라이브에서 TreeList를 사용하여 디렉토리 구조를 확인할 수 있습니다.
using System.IO;
using System.Windows.Forms;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraTreeList.Nodes;
namespace DevTestForm
{
/// <summary>
/// 메인폼 클래스 입니다.
/// </summary>
public partial class MainForm : Form
{
// Constructor (Public)
#region MainForm() - 생성자 입니다.
/// <summary>
/// 생성자 입니다.
/// </summary>
public MainForm()
{
InitializeComponent();
InitTreeList();
InitData();
#region 이벤트를 설정합니다.
#endregion
}
#endregion
private void InitTreeList()
{
TreeListColumn fullNameColumn = new TreeListColumn();
TreeListColumn nameColumn = new TreeListColumn();
TreeListColumn typeColumn = new TreeListColumn();
TreeListColumn sizeColumn = new TreeListColumn();
fullNameColumn.Caption = "FullName";
fullNameColumn.FieldName = "FullName";
nameColumn.Caption = "Name";
nameColumn.FieldName = "Name";
nameColumn.MinWidth = 27;
nameColumn.VisibleIndex = 0;
nameColumn.Width = 274;
typeColumn.Caption = "Type";
typeColumn.FieldName = "Type";
typeColumn.VisibleIndex = 1;
typeColumn.Width = 112;
sizeColumn.AppearanceCell.Options.UseTextOptions = true;
sizeColumn.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
sizeColumn.Caption = "Size(Bytes)";
sizeColumn.FieldName = "Size";
sizeColumn.Format.FormatType = DevExpress.Utils.FormatType.Numeric;
sizeColumn.Format.FormatString = "n0";
sizeColumn.VisibleIndex = 2;
sizeColumn.Width = 123;
this.devTreeList.Columns.AddRange(new TreeListColumn[]
{
fullNameColumn, nameColumn, typeColumn, sizeColumn
});
this.devTreeList.Dock = DockStyle.Fill;
this.devTreeList.OptionsBehavior.AutoChangeParent = false;
this.devTreeList.OptionsBehavior.AutoNodeHeight = false;
this.devTreeList.OptionsBehavior.CloseEditorOnLostFocus = false;
this.devTreeList.OptionsBehavior.Editable = false;
this.devTreeList.OptionsBehavior.ShowToolTips = false;
this.devTreeList.OptionsBehavior.SmartMouseHover = false;
this.devTreeList.OptionsSelection.KeepSelectedOnClick = false;
this.devTreeList.StateImageList = this.imageList;
#region 이벤트를 설정합니다.
this.devTreeList.AfterCollapse += devTreeList_AfterCollapse;
this.devTreeList.AfterExpand += devTreeList_AfterExpand;
this.devTreeList.BeforeExpand += devTreeList_BeforeExpand;
#endregion
}
// Event Method (Private)
#region devTreeList_AfterCollapse(sender, e)
/// <summary>
/// 트리리스트의 노드가 접힌 후에 동작합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void devTreeList_AfterCollapse(object sender, NodeEventArgs e)
{
if(e.Node.StateImageIndex != 1)
{
e.Node.StateImageIndex = 0;
}
}
#endregion
#region devTreeList_AfterExpand(sender, e)
/// <summary>
/// 트리리스트의 노드가 펼쳐진 후에 동작합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void devTreeList_AfterExpand(object sender, NodeEventArgs e)
{
if (e.Node.StateImageIndex != 1)
{
e.Node.StateImageIndex = 2;
}
}
#endregion
#region devTreeList_BeforeExpand(sender, e)
/// <summary>
/// 트리리스트의 노드가 펼쳐지기 전에 동작합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void devTreeList_BeforeExpand(object sender, BeforeExpandEventArgs e)
{
if(e.Node.Tag != null)
{
Cursor currentCursor = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
InitFolders(e.Node.GetDisplayText("FullName"), e.Node);
e.Node.Tag = null;
Cursor.Current = currentCursor;
}
}
#endregion
#region InitData() - 데이터를 초기화합니다.
/// <summary>
/// 데이터를 초기화합니다.
/// </summary>
private void InitData()
{
InitFolders(Directory.GetDirectoryRoot(Directory.GetCurrentDirectory()), null);
}
#endregion
#region InitFolders(path, node) - 폴더를 초기화 합니다.
/// <summary>
/// 폴더를 초기화 합니다.
/// </summary>
/// <param name="path">경로 입니다.</param>
/// <param name="node">노드 입니다.</param>
private void InitFolders(string path, TreeListNode node)
{
this.devTreeList.BeginUnboundLoad();
TreeListNode treeListNode;
DirectoryInfo directoryInfo;
try
{
string[] root = Directory.GetDirectories(path);
foreach(string item in root)
{
try
{
directoryInfo = new DirectoryInfo(item);
treeListNode = this.devTreeList.AppendNode
(
new object[] { item, directoryInfo.Name, "Folder", null }, node
);
treeListNode.StateImageIndex = 0;
treeListNode.HasChildren = HasFiles(item);
if (treeListNode.HasChildren)
{
treeListNode.Tag = true;
}
}
catch{ }
}
}
catch{ }
InitFiles(path, node);
this.devTreeList.EndUnboundLoad();
}
#endregion
#region InitFiles(path, node) - 파일을 초기화 합니다.
/// <summary>
/// 파일을 초기화 합니다.
/// </summary>
/// <param name="path">경로 입니다.</param>
/// <param name="node">노드 입니다.</param>
private void InitFiles(string path, TreeListNode node)
{
TreeListNode treeListNode;
FileInfo fileInfo;
try
{
string[] root = Directory.GetFiles(path);
foreach(string item in root)
{
fileInfo = new FileInfo(item);
treeListNode = this.devTreeList.AppendNode
(
new object[] { item, fileInfo.Name, "File", fileInfo.Length }, node
);
treeListNode.StateImageIndex = 1;
treeListNode.HasChildren = false;
}
}
catch { }
}
#endregion
#region HasFiles(path) - 파일의 존재 여부를 확인합니다.
/// <summary>
/// 파일의 존재 여부를 확인합니다.
/// </summary>
/// <param name="path">경로 입니다.</param>
/// <returns>파일 유무를 리턴합니다.</returns>
private bool HasFiles(string path)
{
string[] root = Directory.GetFiles(path);
if(root.Length > 0)
{
return true;
}
root = Directory.GetDirectories(path);
if(root.Length > 0)
{
return true;
}
return false;
}
#endregion
}
}
728x90
'C# > DevExpress' 카테고리의 다른 글
DevExpress / Winform TextEdit에서 천 단위로 끊어서 표기하기(ex: 2,300) (0) | 2019.09.10 |
---|---|
DevExpress / Winform 유효성 검사를 합니다. (0) | 2019.07.11 |
DevExpress / Winform TreeList에서 노드 추가하기 입니다. (0) | 2019.06.16 |
DevExpress / Winform 탭 그룹을 생성합니다. (1) | 2019.06.16 |
DevExpress / Winform XtraDialog로 로그인 화면 만들기. (0) | 2019.06.07 |
댓글