반응형
Today
Total
Recent Posts
Recent Comments
Archives
11-27 13:01
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
관리 메뉴

UD_park's IT story

[C# Winform] Winform ListView 개념과 사용법 본문

IT - Language/C# Windows Forms

[C# Winform] Winform ListView 개념과 사용법

kingllzn 2018. 7. 13. 16:50
반응형
SMALL

[이 포스팅은

예제로 배우는 C# 프로그래밍의

http://www.csharpstudy.com/

내용을 발췌하였습니다]

 

[보기용 예제 소스 코드에서 오류 발생시에

댓글이나 방명록에 글을 남겨 주시면 수정/보완하겠습니다]

 

 

이번에는 Winform의 ListView에 대한

개념과 사용법에 대해서

포스팅을 시작해보도록 하겠습니다

 

 

일단 ListView 설명에 앞서

파일을 찾아내는 일을 수행하는

파일 탐색기라고 불리는 아이가 있습니다

이 파일 탐색기가 찾아낸 파일들을

다양한 리스트 모습으로 보여주는

컨트롤이 바로 ListView입니다

 

 

ListView에서 파일 리스트들을

보여주는 방식은 Details, List, Title

,LargeIcon ,SmallIcon 등 5가지가 있습니다

 

일단 코드로 설명하기 이전에

제가 코드 소스를 준비하면서

필요했던 과정들을 잠깐

설명하고 넘어가겠습니다

 

왜냐하면 ListView를 사용하려면

그 전에 ListView가 파일들을 표현할

아이콘과 찾을 위치 등 시작하기 전에

설정해줘야 하는 것들이

생각보다 많고 복잡하기 때문입니다

(저만 복잡하고 많다고 생각할수도..)

 

 

일단 ListView의 UI의 update인

갱신을 중지해줘야 합니다

그 이유는 제대로 쓰기 전에

모든 환경을 세팅해놓기 위함입니다

(저의 개인적인 생각입니다)

 

그런 다음에 세팅이 완료된 후에

UI의 중지를 풀어줍니다

 

이때, 필요한 재료들을 세팅할

그릇들은 바로 ListItemView 객체라는

곳에다가 넣어 주시면 됩니다

(ListItemView 객체를

Items 컬렉션에 추가)

 

 

 

그럼 최대한 간단하게 설명했으니

소스 코드를 보며 하나 하나 진행해 보도록

하겠습니다

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace WinformListViewExam01
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 현재 디렉토리 내의 파일리스트 얻기
            string currDir = Environment.CurrentDirectory;
            DirectoryInfo di = new DirectoryInfo(currDir);
            FileInfo[] files = di.GetFiles();

            // 리스트뷰 아이템을 업데이트 하기 시작.
            // 업데이트가 끝날 때까지 UI 갱신 중지.
            listView1.BeginUpdate();

            // 뷰 모드 지정
            listView1.View = View.Details;

            // 아이콘을 위해 이미지 지정
            listView1.LargeImageList = imageList1;
            listView1.SmallImageList = imegeList2;

            foreach (var fi in files)
            {
                // 각 파일별로 ListViewItem 객체를 하나씩 만들기
                // 파일명, 사이즈, 날짜 정보를 추가함
                ListViewItem lvi = new ListViewItem(fi.Name);
                lvi.SubItems.Add(fi.Length.ToString());
                lvi.SubItems.Add(fi.LastWriteTime.ToString());
                lvi.ImageIndex = 0;

                // ListViewItem 객체를 Items 속성에 추가하기
                listView1.Items.Add(lvi);
            }

            // 컬럼명과 컬럼 사이즈를 지정
            listView1.Columns.Add("파일명", 200, HorizontalAlignment.Left);
            listView1.Columns.Add("사이즈", 70, HorizontalAlignment.Left);
            listView1.Columns.Add("날짜", 150, HorizontalAlignment.Left);

            // 리스트뷰를 새로고침하여 보여줌
            listView1.EndUpdate();
        }

        // View 모드를 지정
        private void radioDetails_CheckedChanged_1(object sender, EventArgs e)
        {
            listView1.View = View.Details;
        }

        private void radioList_CheckedChanged_1(object sender, EventArgs e)
        {
            listView1.View = View.List;
        }

        private void radioTitle_CheckedChanged(object sender, EventArgs e)
        {
            listView1.View = View.Tile;
        }

        private void radioButton4_CheckedChanged(object sender, EventArgs e)
        {
            listView1.View = View.LargeIcon;
        }

        private void radioButton5_CheckedChanged(object sender, EventArgs e)
        {
            listView1.View = View.SmallIcon;
        }
    }
}

 

이전에 다뤘던 Winform 기능들과는 달리

조금 더 긴 편입니다 집중해서

설명을 따라와 주셨으면 좋겠습니다

 

일단 Form1_Load블록의 안에있는

소스 코드 녀석들부터 차근차근

풀어보겠습니다

 

// 현재 디렉토리 내의 파일리스트 얻기
            string currDir = Environment.CurrentDirectory;
            DirectoryInfo di = new DirectoryInfo(currDir);
            FileInfo[] files = di.GetFiles();

 

주석문의 설명대로 이 부분은

파일 탐색기가 찾을 위치를

현재 만들고있는 프로젝트가 저장될 곳으로

지정해주는 부분입니다

 

꼭 이 부분을 작성하시기 전에

using System.IO;를

윗 부분에 추가해주시기 바랍니다!!

 

 

Environment.CurrentDirectory;가 바로

현재 파일이 저장될 위치이며

이 위치의 값을 string 으로 선언한

currDir이란 아이가 가지게 됩니다

 

그리고 그 파일들의 디렉토리 정보를

di라는 아이에게 넘겨주는데

문법을 설명하자면

new DirectoryInfo(이부분);이 바로

어느곳에 디렉토리 정보를 읽을까

라는것을 정하는 부분입니다

그렇기 때문에 괄호 ( ) 안에

currDir이 들어가 있습니다

 

그리고 뒤에 ListView에 출력시킬 파일들의

정보를 읽어오는 아이로 files로 생성해서

di가 가지고있는 파일들을 files에

담아줍니다

 

 

// 리스트뷰 아이템을 업데이트 하기 시작.
            // 업데이트가 끝날 때까지 UI 갱신 중지.
            listView1.BeginUpdate();

            // 뷰 모드 지정
            listView1.View = View.Details;

            // 아이콘을 위해 이미지 지정
            listView1.LargeImageList = imageList1;
            listView1.SmallImageList = imegeList2;

 

이 부분은 앞서 설명드린 바와 같이

시작하기전 일단 세팅먼저 하려고

ListView를 멈춰 주는 부분입니다

 

listView1.BeginUpdate();는

업데이트 시작할테니 멈춰있어라

라고 해석 할 수있겠습니다

 

그리고 그 뒤의

listView1.View = View.Details;는

디버깅해서 윈폼 창이 딱 나올 때

기본으로 지정할 ListView의 모드들 중에

Details로 정해놓는 부분입니다

 

그 뒷 부분은 ListView에서

파일들의 아이콘으로 사용할

이미지들을 가져와 정해주는 부분입니다

 

 

            foreach (var fi in files)
            {
                // 각 파일별로 ListViewItem 객체를 하나씩 만들기
                // 파일명, 사이즈, 날짜 정보를 추가함
                ListViewItem lvi = new ListViewItem(fi.Name);
                lvi.SubItems.Add(fi.Length.ToString());
                lvi.SubItems.Add(fi.LastWriteTime.ToString());
                lvi.ImageIndex = 0;

                // ListViewItem 객체를 Items 속성에 추가하기
                listView1.Items.Add(lvi);
            }

 

벌써부터 설명하기 무서운

foreach문 부분입니다

일단 위에서 파일들의 정보를 담고있던 files를

foreach 문에서는 이름을 바꿔 fi라고합니다

 

그리고 ListViewItem으로 쓸 그릇인

lvi라는 이름으로 그릇을 만드는 작업이

5번째 줄의 코드입니다

new ListViewItem(이부분!);에서

보이시다시피 위에서 선언했던

files가 개명한 fi라는 아이가

가지고 있던 파일의 이름,

그 밑에 줄에서 보이시다 시피

그 파일의 사이즈를 담고있는 문자열,

그리고 작성시간이 담겨있는 문자열을

가져와서 lvi의 Item들에다 각 각

담아줍니다

 

그런 다음에 아래에 listView1.Items.Add( );에

lvi를 괄호안에 넣어줌으로서

listView1에다가 읽어와서 가지고 있던

파일의 모든 정보들을 넣어줍니다

 

 

            // 컬럼명과 컬럼 사이즈를 지정
            listView1.Columns.Add("파일명", 200, HorizontalAlignment.Left);
            listView1.Columns.Add("사이즈", 70, HorizontalAlignment.Left);
            listView1.Columns.Add("날짜", 150, HorizontalAlignment.Left);

            // 리스트뷰를 새로고침하여 보여줌
            listView1.EndUpdate();
        }

        // View 모드를 지정
        private void radioDetails_CheckedChanged_1(object sender, EventArgs e)
        {
            listView1.View = View.Details;
        }

        private void radioList_CheckedChanged_1(object sender, EventArgs e)
        {
            listView1.View = View.List;
        }

        private void radioTitle_CheckedChanged(object sender, EventArgs e)
        {
            listView1.View = View.Tile;
        }
        // LargeIcon/SmallIcon 이벤트 핸들러 생략

 

이곳은 딱히 깊게 설명할 필요가 없으니

간단하게 설명하고 빠르게 넘어가겠습니다

 

말 그대로 컬럼들의 이름과 사이즈를 설정하고

그리고 리스트뷰를 멈춰두었던 설정을

새로고침을해서 풀어주는게 바로

listView1.EndUpdate( );입니다

 

그 후 아래의 부분에는

리스트뷰의 다양한 표현 방법을

선택하게 하는 라디오 버튼들이

클릭되었을 때, 해당 표현 방법을

불러오도록 정해줍니다

 

 

 

여기서 한 가지

파일들의 아이콘으로 쓸

이미지는 ImageList를 사용하는

포스팅을 참고해 주시기 바랍니다

 

[이 과정을 제외 시키신다면

출력 결과에서 아이콘을 보실 수 없습니다]

 

 

이렇게 모든 설정이 완료되었습니다

그럼 출력 결과로서 확인 해보겠습니다

 

그럼 여기서 Winform ListView의

개념과 사용법에 대한 포스팅을

이만 마치도록 하겠습니다

 

 

 

혹시 다른것에 대해 궁금하신게

있으시다면

댓글에 달아주세요

 

아는것이면 친절하게 쉽게

모르는것이면 또 제가 알아내서

친절하게 쉽게 포스팅해서

설명해드리겠습니다

 

 

 

 

 

반응형
LIST
Comments