Sample.File.Explorer/Source
*.Designer.cs 부분 소스
this.treeView1.BeforeCollapse += new Systehttp://m.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeCollapse);
this.treeView1.BeforeExpand += new Systehttp://m.Windows.Forms.TreeViewCancelEventHandler(this.treeView1_BeforeExpand);
this.treeView1.NodeMouseClick += new Systehttp://m.Windows.Forms.TreeNodeMouseClickEventHandler(this.treeView1_NodeMouseClick);
*.cs 부분 소스
private void Form1_Load(object sender, EventArgs e)
{
//현재 사용자 정보 표시
System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
label1.Text = "현재 사용자 :" + identity.Name;
//현재 로컬 컴퓨터에 존재하는 드라이브 정보 검색하여 트리노드에 추가
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach (DriveInfo dname in allDrives)
{
if (dname.DriveType == DriveType.Fixed)
{
if (dname.Name == @"C:\")
{
TreeNode rootNode = new TreeNode(dname.Name);
rootNode.ImageIndex = 0;
rootNode.SelectedImageIndex = 0;
treeView1.Nodes.Add(rootNode);
Fill(rootNode);
}
else
{
TreeNode rootNode = new TreeNode(dname.Name);
rootNode.ImageIndex = 1;
rootNode.SelectedImageIndex = 1;
treeView1.Nodes.Add(rootNode);
Fill(rootNode);
}
}
}
//첫번째 노드 확장
treeView1.Nodes[0].Expand();
//ListView 보기 속성 설정
listView1.View = View.Details;
//ListView Details 속성을 위한 헤더 추가
listView1.Columns.Add("디렉토리.이름", listView1.Width / 5, HorizontalAlignment.Left);
listView1.Columns.Add("이름", listView1.Width / 5, HorizontalAlignment.Left);
listView1.Columns.Add("수정한 날짜", listView1.Width / 5, HorizontalAlignment.Left);
listView1.Columns.Add("유형", listView1.Width / 5, HorizontalAlignment.Left);
listView1.Columns.Add("크기", listView1.Width / 5, HorizontalAlignment.Left);
//행 단위 선택 가능
listView1.FullRowSelect = true;
}
/// <summary>
/// 트리를 마우스로 클릭할 때 발생하는 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
try
{
//기존의 파일 목록 제거
listView1.Items.Clear();
DirectoryInfo dir = new DirectoryInfo(e.Node.FullPath);
int DirectCount = 0;
//하부 데렉토르 보여주기
foreach (DirectoryInfo dirItem in dir.GetDirectories())
{
//하부 디렉토리가 존재할 경우 ListView에 추가
//ListViewItem 객체를 생성
ListViewItem lsvitem = new ListViewItem();
//생성된 ListViewItem 객체에 똑같은 이미지를 할당
lsvitem.ImageIndex = 2;
lsvitem.Text = dirItem.Name;
//아이템을 ListView(listView1)에 추가
listView1.Items.Add(lsvitem);
listView1.Items[DirectCount].SubItems.Add("");
listView1.Items[DirectCount].SubItems.Add(dirItem.CreationTime.ToString());
listView1.Items[DirectCount].SubItems.Add("폴더");
listView1.Items[DirectCount].SubItems.Add(dirItem.GetFiles().Length.ToString() + " files");
DirectCount++;
}
//디렉토리에 존재하는 파일목록 보여주기
FileInfo[] files = dir.GetFiles();
int Count = 0;
foreach (FileInfo fileinfo in files)
{
listView1.Items.Add(fileinfo.FullName);
listView1.Items[Count].SubItems.Add(fileinfo.Name);
if (fileinfo.LastWriteTime != null)
{
listView1.Items[Count].SubItems.Add(fileinfo.LastWriteTime.ToString());
}
else
{
listView1.Items[Count].SubItems.Add(fileinfo.CreationTime.ToString());
}
listView1.Items[Count].SubItems.Add(fileinfo.Attributes.ToString());
listView1.Items[Count].SubItems.Add(fileinfo.Length.ToString());
Count++;
}
}
catch (Exception ex)
{
//MessageBox.Show("에러 발생 : " + ex.Message);
}
treeView1.Nodes[0].Expand();
}
private void Fill(TreeNode dirNode)
{
try
{
DirectoryInfo dir = new DirectoryInfo(dirNode.FullPath);
//드라이브의 하위 폴더 추가
foreach (DirectoryInfo dirItem in dir.GetDirectories())
{
TreeNode newNode = new TreeNode(dirItem.Name);
newNode.ImageIndex = 2;
newNode.SelectedImageIndex = 2;
dirNode.Nodes.Add(newNode);
newNode.Nodes.Add("*");
}
}
catch (Exception ex)
{
//MessageBox.Show("에러 발생 : " + ex.Message);
}
}
/// <summary>
/// 트리가 확장되기 전에 발생하는 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes[0].Text == "*")
{
e.Node.Nodes.Clear();
e.Node.ImageIndex = 3;
e.Node.SelectedImageIndex = 3;
Fill(e.Node);
}
}
/// <summary>
/// 트리가 닫히기 전에 발생하는 이벤트
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void treeView1_BeforeCollapse(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes[0].Text == "*")
{
e.Node.ImageIndex = 2;
e.Node.SelectedImageIndex = 2;
}
}
'c# 언어 > 중급과정' 카테고리의 다른 글
(ComponentOne) 라이선스 에러 발생시 대처 방법 안내 - 마이그레이션 방법(추가 질문사항) (0) | 2024.03.06 |
---|---|
(클로버-X에 질문)GC(Garbage Collection)의 문제점 (0) | 2024.02.14 |
(클로버-X에 질문)c++언어는 메모리를 직접 관리해야 하나요(?) (0) | 2024.02.08 |
(클로버-X에 질문)c#언어는 메모리를 직접 관리해야 하나요(?) (0) | 2024.02.08 |
(클로버-X에 질문)java언어는 메모리를 직접 관리해야 하나요(?) (0) | 2024.02.08 |