PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
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은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
jinhosama
08/11/21 13:34
수정 아이콘
// 트리의 특정노드 선택시!!
private void Tree_AfterSelect(object sender, TreeViewEventArgs e)

// CurrentPosition = e.Node.Name; // 선택된 노드의 경로 이름 //경로이름이 아니라 경로를 주어야 할꺼 같습니다.
CurrentPosition = e.Node.FullPath;

updateListView(CurrentPosition);



두번째는 .. 특정노도선택시의 이벤트가 연결이 안되여 있는거 같은데.. VS2008에서 돌려서 그럴수도..
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
45411 갑자기 입술이 부어오릅니다. [3] khw7113022 08/11/21 3022
45409 카투사 관련 질문입니다. [4] 디보션1906 08/11/21 1906
45408 잠자리에 들었는데 해야될 일을 기억해내는 장면 [1] KanRyu1953 08/11/21 1953
45407 우리나라처럼 환율이 폭등한 나라가 있을까요? [1] MDRT1726 08/11/21 1726
45405 아프리카 동물구호 자원봉사 [1] [秋] AKi2201 08/11/21 2201
45404 저작권법 위반 관련해서.. [3] 8141798 08/11/21 1798
45403 머리스타일 바꿀려고 하는데요..염색관련 질문.. [6] funnyday2116 08/11/21 2116
45402 저에게 더이상 토익에게서 도망갈수 없는 시기가 왔습니다;; [6] Xell0ss2291 08/11/21 2291
45401 자게 키 관련 글을 보고나니 갑자기 급우울해졌습니다. [17] 거침없는몸부3577 08/11/21 3577
45400 이번에 수능본 고3이랑 놀아줘야 합니다.;; [8] Who am I?1934 08/11/21 1934
45399 이 사양에 맞는 VGA 추천부탁드립니다. [3] vocal1617 08/11/21 1617
45398 이승철 콘서트 가보신분? [1] 이민님닉냄수2515 08/11/21 2515
45397 미적분학 문제 질문입니다. ㅜㅜ [1] deadbody2183 08/11/21 2183
45396 걷기운동, 살많이빠지나요? [4] Yuki2217 08/11/21 2217
45395 실수로 지웠는데 C# 조금 급한 질문입니다. [1] EZrock2795 08/11/21 2795
45394 여성에게 어떤 책을 선물해야 좋을 까요..?? [12] Warmen1813 08/11/21 1813
45393 어제 kornet에 대해 질문했었는데 한번 더 봐주셨으면^^; [3] KID A1596 08/11/21 1596
45392 한예슬이랑 성유리랑 누가 더 이쁘나요? [27] 지니쏠2234 08/11/21 2234
45391 연애관련!(스압) [7] 오월2149 08/11/21 2149
45389 질문좀할게요; [4] Art Of Life2088 08/11/20 2088
45388 CPA와 FRM/CFA lv.1의 쓰임에 관한 질문(회계/금융/재무 관련 질문일수도…) [3] 라이시륜2778 08/11/20 2778
45387 복근운동과 줄넘기질문 [4] 구우사마2416 08/11/20 2416
45385 옷 잃어버린 친구 반응 ... [27] worcs2423 08/11/20 2423
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로