첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
본 블로그는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 블로그 콘텐츠 향상을 위해 쓰여집니다.

728x90
반응형
728x170

 

▶ MainForm.cs

using System;
using System.IO;

using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Columns;

namespace TestProject
{
    /// <summary>
    /// 메인 폼
    /// </summary>
    public partial class MainForm : XtraForm
    {
        //////////////////////////////////////////////////////////////////////////////////////////////////// Field
        ////////////////////////////////////////////////////////////////////////////////////////// Private

        #region Field

        /// <summary>
        /// 드라이브 로드 여부
        /// </summary>
        private bool driveLoaded = false;

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
        ////////////////////////////////////////////////////////////////////////////////////////// Public

        #region 생성자 - MainForm()

        /// <summary>
        /// 생성자
        /// </summary>
        public MainForm()
        {
            InitializeComponent();

            TreeListColumn fullNameColumn = new TreeListColumn();

            fullNameColumn.FieldName = "FullName";
            fullNameColumn.Caption   = "FullName";

            TreeListColumn nameColumn = new TreeListColumn();

            nameColumn.FieldName    = "Name";
            nameColumn.Caption      = "Name";
            nameColumn.MinWidth     = 30;
            nameColumn.Width        = 250;
            nameColumn.VisibleIndex = 0;

            TreeListColumn typeColumn = new TreeListColumn();

            typeColumn.FieldName    = "Type";
            typeColumn.Caption      = "Type";
            typeColumn.Width        = 100;
            typeColumn.VisibleIndex = 1;

            TreeListColumn sizeColumn = new TreeListColumn();

            sizeColumn.FieldName                             = "Size";
            sizeColumn.Caption                               = "Size(Bytes)";
            sizeColumn.AppearanceCell.Options.UseTextOptions = true;
            sizeColumn.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Far;
            sizeColumn.Format.FormatType                     = FormatType.Numeric;
            sizeColumn.Format.FormatString                   = "n0";
            sizeColumn.Width                                 = 100;
            sizeColumn.VisibleIndex                          = 2;

            this.treeList.Columns.AddRange
            (
                new TreeListColumn[]
                {
                    fullNameColumn,
                    nameColumn,
                    typeColumn,
                    sizeColumn
                }
            );

            this.treeList.OptionsView.AutoWidth          = false;
            this.treeList.OptionsBehavior.AutoNodeHeight = false;
            this.treeList.OptionsBehavior.Editable       = false;
            this.treeList.SelectImageList                = this.svgImageCollection;

            Load                                   += Form_Load;
            this.treeList.VirtualTreeGetCellValue  += treeList_VirtualTreeGetCellValue;
            this.treeList.VirtualTreeGetChildNodes += treeList_VirtualTreeGetChildNodes;
            this.treeList.GetSelectImage           += treeList_GetSelectImage;
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method
        ////////////////////////////////////////////////////////////////////////////////////////// Private
        //////////////////////////////////////////////////////////////////////////////// Event

        #region 폼 로드시 처리하기 - Form_Load(sender, e)

        /// <summary>
        /// 폼 로드시 처리하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void Form_Load(object sender, EventArgs e)
        {
            this.treeList.DataSource = new object();
        }

        #endregion
        #region 트리 리스트 가상 트리 셀 값 구하기 - treeList_VirtualTreeGetCellValue(sender, e)

        /// <summary>
        /// 트리 리스트 가상 트리 셀 값 구하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void treeList_VirtualTreeGetCellValue(object sender, VirtualTreeGetCellValueInfo e)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo((string)e.Node);

            if(e.Column.FieldName == "FullName")
            {
                e.CellData = directoryInfo.FullName;
            }
            else if(e.Column.FieldName == "Name")
            {
                e.CellData = directoryInfo.Name;
            }
            else if(e.Column.FieldName == "Type")
            {
                if(!IsFile(directoryInfo))
                {
                    e.CellData = "Folder";
                }
                else
                {
                    e.CellData = "File";
                }
            }
            else if(e.Column.FieldName == "Size")
            {
                if(IsFile(directoryInfo))
                {
                    e.CellData = new FileInfo((string)e.Node).Length;
                }
                else
                {
                    e.CellData = null;
                }
            }
        }

        #endregion
        #region 트리 리스트 가상 트리 자식 노드 구하기 - treeList_VirtualTreeGetChildNodes(sender, e)

        /// <summary>
        /// 트리 리스트 가상 트리 자식 노드 구하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void treeList_VirtualTreeGetChildNodes(object sender, VirtualTreeGetChildNodesInfo e)
        {
            if(!this.driveLoaded)
            {
                string[] driveArray = Directory.GetLogicalDrives();

                e.Children = driveArray;

                this.driveLoaded = true;
            }
            else
            {
                try
                {
                    string path  = (string)e.Node;

                    if(Directory.Exists(path))
                    {
                        string[] directoryPathArray = Directory.GetDirectories(path);
                        string[] filePathArray      = Directory.GetFiles(path);
                        string[] pathArray          = new string[directoryPathArray.Length + filePathArray.Length];

                        directoryPathArray.CopyTo(pathArray,0);

                        filePathArray.CopyTo(pathArray,directoryPathArray.Length);

                        e.Children = pathArray;
                    }
                    else
                    {
                        e.Children = new object[] { };
                    }
                }
                catch
                {
                    e.Children = new object[] { };
                }
            }
        }

        #endregion
        #region 트리 리스트 선택 이미지 구하기 - treeList_GetSelectImage(sender, e)

        /// <summary>
        /// 트리 리스트 선택 이미지 구하기
        /// </summary>
        /// <param name="sender">이벤트 발생자</param>
        /// <param name="e">이벤트 인자</param>
        private void treeList_GetSelectImage(object sender, GetSelectImageEventArgs e)
        {
            TreeList treeList = sender as TreeList;

            string type = treeList.GetRowCellValue(e.Node, treeList.Columns["Type"]).ToString();

            if(type == "Folder")
            {
                e.NodeImageIndex = 0;
            }
            else
            {
                e.NodeImageIndex = 1;
            }
        }

        #endregion

        //////////////////////////////////////////////////////////////////////////////// Function

        #region 파일 여부 구하기 - IsFile(directoryInfo)

        /// <summary>
        /// 파일 여부 구하기
        /// </summary>
        /// <param name="directoryInfo">디렉토리 정보</param>
        /// <returns>파일 여부</returns>
        private bool IsFile(DirectoryInfo directoryInfo)
        {
            return (directoryInfo.Attributes & FileAttributes.Directory) == 0;
        }

        #endregion
    }
}
728x90
반응형
그리드형

'DevExpress > WinForm' 카테고리의 다른 글

[DEVEXPRESS/WINFORM] TreeList 클래스 : DragEnter/DragDrop/DragOver 이벤트를 사용해 드래그 & 드롭 사용하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListColumn 클래스 : Format 속성을 사용해 컬럼 포맷 설정하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListNode 클래스 : Expanded 속성을 사용해 노드 확장하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : 밴드 레이아웃 사용하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeListColumn 클래스 : GetEnumerator 메소드를 사용해 자식 노드 값 변경하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : VirtualTreeGetChildNodes 이벤트를 사용해 언바운드 모드 데이터 동적 로딩하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : BeforeExpand 이벤트를 사용해 언바운드 모드 데이터 동적 로딩하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : AppendNode 메소드를 사용해 언바운드 모드 노드 만들기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : CustomDrawNodeImages 이벤트를 사용해 노드 이미지 커스텀 그리기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : GetSelectImage 이벤트를 사용해 포커스 노드 이미지 설정하기  (0) 2020.05.30
[DEVEXPRESS/WINFORM] TreeList 클래스 : GetStateImage 이벤트를 사용해 체크 노드 상태 이미지 설정하기  (0) 2020.05.30
Posted by 사용자 icodebroker

댓글을 달아 주세요