UD_park's IT story
[C# Winform] Winform ListView 개념과 사용법 본문
[이 포스팅은
예제로 배우는 C# 프로그래밍의
내용을 발췌하였습니다]
[보기용 예제 소스 코드에서 오류 발생시에
댓글이나 방명록에 글을 남겨 주시면 수정/보완하겠습니다]
이번에는 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의
개념과 사용법에 대한 포스팅을
이만 마치도록 하겠습니다
혹시 다른것에 대해 궁금하신게
있으시다면
댓글에 달아주세요
아는것이면 친절하게 쉽게
모르는것이면 또 제가 알아내서
친절하게 쉽게 포스팅해서
설명해드리겠습니다
'IT - Language > C# Windows Forms' 카테고리의 다른 글
[C# Winform] Winform MaskedTextBox과 ToolTip 개념과 사용법 (2) | 2018.07.19 |
---|---|
[C# Winform] Winform ListBox 개념과 사용법 (2) | 2018.07.13 |
[C# Winform] Winform Label 과 LinkLabel의 개념과 사용법 (0) | 2018.07.13 |
[C# Winform] Winform ComboBox 개념과 사용법 (3) | 2018.07.13 |
[C# Winform] Winform CheckedListBox 개념과 사용법 (2) | 2018.07.13 |