|
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date |
2008/11/21 00:54:13 |
Name |
EZrock |
File #1 |
WindowsSearchBrowser.zip (52.0 KB), Download : 7 |
Subject |
실수로 지웠는데 C# 조금 급한 질문입니다. |
트리뷰와 리스트뷰를 이용해 윈도우 탐색기 형식으로 구현하는 것입니다.
메소드 구현은 끝났는데 문제는 리스트뷰가 제대로 나타나질 않는다는 겁니다.
압축한 어플리케이션은 아무도 안받으시길래;;
일단 소스와 어플리케이션을 같이 올리겠습니다.
현재 문제점은 단 한개입니다. 트리뷰가 지정한 노드에 맞춰서 리스트뷰가 표시되지 않는다는점...
그 점만 해결하면 될 것 같습니다. 많은 도움 부탁드립니다.
...PGR에 자주 오시는 개발자분들...공대서 과제에 치여사는 이 어린양 좀 구제해 주세요...ㅠㅠ
-------------------------------------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace WindowsSearchBrowser
{
public partial class SearchBrowser : Form
{
private string CurrentPosition; // 노드나 리스트가 속한 디렉토리 경로
private bool Expand = new bool();
public SearchBrowser()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
InitTreeView(Tree);
}
/* 트리뷰의 초기화
* 유효한 드라이브의 정보를 문자열 배열로 받고 해당하는 드라이브를 모두 부모노드로
* 이후의 자식 노드들은 확장 시켰을때 그 바로 밑의 자식노드만 생성한다.
*/
private void InitTreeView(TreeView Tree)
{
string[] Drives = Directory.GetLogicalDrives();
foreach (string Drive in Drives)
{
TreeNode Root = new TreeNode(Drive);
Tree.Nodes.Add(Root);
DirectoryInfo Dir = new DirectoryInfo(Drive);
AddTreeNodes(Root, Dir, false);
}
}
// 최상위 패런트 노드 외의 노드를 추가
private void AddTreeNodes(TreeNode Root, DirectoryInfo Dirs, bool Expand)
{
try
{
DirectoryInfo[] CurrentDirectorys = Dirs.GetDirectories();
foreach (DirectoryInfo Dir in CurrentDirectorys)
{
TreeNode Child = new TreeNode(Dir.Name);
Root.Nodes.Add(Child);
Child.ImageIndex = 1;
Child.SelectedImageIndex = 1;
if(Expand == true) AddTreeNodes(Child, Dir, false);
}
}
catch (Exception e) {}
}
// 트리 확장시 이벤트 확장됐다는 의미에서 Expand는 true로
private void Tree_AfterExpand(object sender, TreeViewEventArgs e)
{
DirectoryInfo Dir = new DirectoryInfo(e.Node.FullPath);
e.Node.Nodes.Clear();
AddTreeNodes(e.Node, Dir, true);
}
// 트리의 특정노드 선택시!!
private void Tree_AfterSelect(object sender, TreeViewEventArgs e)
{
CurrentPosition = e.Node.Name; // 선택된 노드의 경로 이름
updateListView(CurrentPosition);
}
// 노드가 선택됐을때 그 노드에 포함되는 파일과 디렉토리 표시
private void updateListView(string CurrentPosition)
{
DirnFileListView.Items.Clear(); // 1. 초기화
try
{
//ListViewItem Item = new ListViewItem(); // 2.리스트 뷰의 아이템 생성
// 3.현재 디렉토리 정보를 가진 변수 생성
DirectoryInfo Dir = new DirectoryInfo(CurrentPosition);
// 4. 디렉토리 정보로 부터 디렉토리들을 모두 배열로 저장받는다.
DirectoryInfo[] LowerDirs = Dir.GetDirectories();
// 5. 하부 디렉토리들이 foreach를 통해 디렉토리 목록을 돈다.
foreach (DirectoryInfo LowerDir in LowerDirs)
{
// 6. foreach를 돌 동안 계속해서 생성하고
ListViewItem Item = new ListViewItem();
Item.ImageIndex = 1;
Item.Name = LowerDir.FullName;
Item.Text = LowerDir.Name;
Item.SubItems.Add(Convert.ToString(LowerDir.LastWriteTime));
Item.SubItems.Add("폴더");
Item.SubItems.Add("");
DirnFileListView.Items.Add(Item); // 리스트뷰에 추가.
}
// 마찬가지로 디렉토리 정보로 부터 파일들을 모두 배열로 받는다.
FileInfo[] Files = Dir.GetFiles();
foreach (FileInfo File in Files)
{
ListViewItem Item = new ListViewItem();
Item.ImageIndex = 2;
Item.Name = File.FullName;
Item.Text = File.Name;
Item.SubItems.Add(Convert.ToString(File.LastWriteTime));
Item.SubItems.Add("파일");
Item.SubItems.Add(Convert.ToString(File.Length / 1024) + "KB");
DirnFileListView.Items.Add(Item);
}
}
catch (Exception e) { MessageBox.Show("ListView Updated Error"); }
}
private void 큰아이콘ToolStripMenuItem_Click(object sender, EventArgs e)
{
DirnFileListView.View = View.LargeIcon;
}
private void 작은아이콘ToolStripMenuItem_Click(object sender, EventArgs e)
{
DirnFileListView.View = View.SmallIcon;
}
private void 자세히ToolStripMenuItem_Click(object sender, EventArgs e)
{
DirnFileListView.View = View.Details;
DirnFileListView.Columns.Add("이름", 100, HorizontalAlignment.Left);
DirnFileListView.Columns.Add("수정한 날짜", 100, HorizontalAlignment.Left);
DirnFileListView.Columns.Add("유형", 100, HorizontalAlignment.Left);
DirnFileListView.Columns.Add("크기", 100, HorizontalAlignment.Left);
}
}
}
|
통합규정 1.3 이용안내 인용
"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
|