티스토리 뷰

728x90

리스트뷰는 리스트 컨트롤과는(윈도우 폼 리스트 컨트롤 다루기 참조) 다른 형태로 동작하는 컨트롤입니다. 리스트 컨트롤이 텍스트 중심으로 수직 형태의 목록을 보여주는 컨트롤이라면 리스트뷰는 탐색기의 파일목록 보기와 유사하게 동작합니다. 탐색기의 파일 목록을 아이콘으로보기, 자세히보기, 목록보기등의 형태로 변형해서 볼수 있는것처럼 사용자에게 다양한 옵션으로 목록을 다룰 수 있도록 기능을 제공합니다.


위의 그림은 리스트뷰 컨트롤을 윈도우폼에 추가하고 .Dock 속성을 "Fill"로 하여 폼의 전체 크기에 리스트뷰가 따라가도록 했으며 리스트뷰 컨트롤 우측 상단의 작은 화살표 버튼을 클릭해서 리스트뷰를 디자인 시점에 다룰 수 있는 작업창을 띄운 것입니다. 뷰 속성(.View)은 위의 그림과 같이 5가지 옵션으로 설정할 수 있는데 각 내용은 탐색기의 옵션과 거의 유사함을 확인할 수 있습니다. 이미지리스트는 작은 아이콘, 큰아이콘 그룹으로 각각 별도의 컨트롤을 추가하여 등록합니다.(픽처박스와 이미지리스트 활용하기 참조) 속성의 이름은 각각 .SmalllmageList와 .LargelmageList 입니다.


추가한 이미지리스트 컨트롤에 아이콘으로 표시할 이미지를 등록했으면 .SmalllmageList와 .LargelmageList 속성에 각각 등록합니다. 이렇게 등록한 이미지들은 "항목 편집..." 창에서 각 항목(ListViewItem 클래스)의 .ImageIndex 값에 따라 선택되고 작은 이미지나 큰 이미지 모두 동일한 인덱스로 선택받습니다.

"그룹 편집..."은 각 항목을 그룹 단위로 묶어서 표시할 때 사용하며 각 항목의 .Group 속성에 각 항목이 속한 그룹을 지정할 수 있습니다. 그룹을 지정하지 않으면 기본(Default) 그룹으로 간주되고 모든 항목이 그룹을 설정하지 않으면 그룹 표시는 나타나지 않습니다. 각 그룹의 표시 내용은 아래의 그림과 같이 Header에 입력합니다.



"열 편집..."은 각 항목의 상세 내용을 자세히(Details 스타일) 보여줄때 상단 제목으로 사용할 열의 내용으로 각 항목의 .Text 속성에 있는 내용이 첫 열의 내용이고 각 항목의 .SubItems 컬렉션 속성에 기술되는 부가 항목 내용들이 두번째 열부터 차례대로 대응합니다. 제목은 아래의 그림과 같이 .Text에 입력합니다. 자세히 보기 스타일에 보여질 각 열의 스타일은 나머지 속성으로 조정할 수 있습니다.



"항목 편집..." 으로 실제적으로 표시할 항목들의 주요 내용을 설정할 수 있습니다. 


Text 속성에 표시할 내용을 설정하고 ImageIndex 에 작은 아이콘과 큰 아이콘으로 사용할 이미지를 선택합니다. Group 속성에 속한 그룹 정보를 입력하고 SubItems 우측의 [...]버튼을 클릭하여 아래의 그림과 같이 해당 항목의 상세 정보를 입력할 수 있습니다. 주의할 것은 각 항목별 부가 항목의 입력 순서가 동일하도록 입력해 주어야 나중에 표시 형태를 정확하게 할 수 있습니다.



아래의 그림은 차례대로 큰아이콘보기, 자세히보기, 작은아이콘보기 형태로 리스트뷰를 표시한 것입니다.

그룹 설정한 내용이 각 스타일별로 표시되고 있고 열 편집 내용이 자세히 보기에서 표시되는 것도 확인할 수 있습니다. 아래의 그림은 차례대로 목록보기, 나란히보기(Tile) 형태로 리스트뷰를 표시한 것입니다.

목록보기 스타일에는 그룹을 표시하지 않으며 나란히 보기 스타일에도 큰 이미지 크기에 맞도록 상세 정보를 표시하고 있음을 확인할 수 있습니다. 큰 아이콘의 크기를 크게 하면 더 많은 상세 정보를 표시합니다.

위에서 언급한 속성을 포함하여 리스트뷰의 주요 속성은 다음과 같습니다.

  • CheckBoxes : True면 각 항목 앞에 체크박스 표시

  • CheckedlndicesCheckedltems : 현재 체크 상태인 항목의 인덱스 또는 항목 개체를 리턴

  • ColumnsItems : 자세히보기 제목열 정보 및 항목 정보 컬렉션

  • FocusedltemTopltem : 현재 사용자 포커스가 있는 항목, 목록의 첫항목 리턴

  • LargelmageListSmalllmageList : 큰 아이콘, 작은 아이콘 이미지를 지정하는 이미지 리스트

  • SelectedlndicesSelectedltems 현재 선택 상태인 항목의 인덱스 또는 항목 개체를 리턴

  • MultiSelectScrollableSorting, LabelEdit : 다중 선택 가능 여부, 스크롤 가능 여부, 정렬 여부, 직접 수정 가능 여부를 설정합니다.

  • View : 5가지의 리스트뷰 스타일 지정

  • GetItemAt(x, y) : X, Y좌표 위치에 해당하는 항목을 리턴합니다.


리스트뷰의 각 항목은 ListViewItem 클래스로 표현되는데 "ListView1.Items(0)"와 같이 간편하게 참조할 수 있습니다. 자주 사용하는 주요 속성은 다음과 같습니다.

  • Group : 항목이 속하는 그룹 지정

  • Index : 리스트뷰 상의 항목의 인덱스

  • StateImageIndex : 표시할 이미지의 이미지리스트상의 인덱스

  • TextSubItems : 항목의 텍스트와 상세 정보를 담는 컬렉션 속성

  • Checked, Selected : 해당 항목이 체크 되었는지, 선택되었는지 여부


리스트뷰와 연관된 이벤트는 선택 항목이 변경되면 전달하는 SelectedlndexChanged 이벤트, 체크박스를 표시한 경우 체크 상태가 변경되면 전달하는 ItemChecked 이벤트 등을 처리할 수 있습니다.

실행중 리스트뷰의 내용을 다룰 경우에는 다음과 같은 *.Designer.vb 코드를 참조할 필요가 있으며 많은 경우 컬렉션 속성에 대한 처리이므로 컬렉션 클래스 다루기에 준해서 작업하면 됩니다.

Dim ListViewGroup1 As System.Windows.Forms.ListViewGroup = _
    New System.Windows.Forms.ListViewGroup("정회원", System.Windows.Forms.HorizontalAlignment.Left)
Dim ListViewGroup2 As System.Windows.Forms.ListViewGroup = _
    New System.Windows.Forms.ListViewGroup("준회원", System.Windows.Forms.HorizontalAlignment.Left)
Dim ListViewItem1 As System.Windows.Forms.ListViewItem = _
    New System.Windows.Forms.ListViewItem(New String() {"홍길동", "길동", "30", "170"}, 1)
Dim ListViewGroup3 As System.Windows.Forms.ListViewGroup = _
    New System.Windows.Forms.ListViewGroup("정회원", System.Windows.Forms.HorizontalAlignment.Left)
Dim ListViewItem2 As System.Windows.Forms.ListViewItem = _
    New System.Windows.Forms.ListViewItem(New String() {"홍길순", "길순", "50", "150"}, 2)
Dim ListViewGroup4 As System.Windows.Forms.ListViewGroup = _
    New System.Windows.Forms.ListViewGroup("준회원", System.Windows.Forms.HorizontalAlignment.Left)
Dim ListViewItem3 As System.Windows.Forms.ListViewItem = _
    New System.Windows.Forms.ListViewItem(New String() {"박문수", "문수", "25", "165"}, 3)
Dim resources As System.ComponentModel.ComponentResourceManager = _
    New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.ListView1 = New System.Windows.Forms.ListView()
Me.ColumnHeader1 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader2 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader3 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ColumnHeader4 = CType(New System.Windows.Forms.ColumnHeader(), System.Windows.Forms.ColumnHeader)
Me.ImageList2 = New System.Windows.Forms.ImageList(Me.components)
Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)

Me.ListView1.Columns.AddRange(New System.Windows.Forms.ColumnHeader() _
    {Me.ColumnHeader1, Me.ColumnHeader2, Me.ColumnHeader3, Me.ColumnHeader4})
Me.ListView1.Dock = System.Windows.Forms.DockStyle.Fill
ListViewGroup1.Header = "정회원"
ListViewGroup1.Name = "ListViewGroup1"
ListViewGroup2.Header = "준회원"
ListViewGroup2.Name = "ListViewGroup2"
Me.ListView1.Groups.AddRange(New System.Windows.Forms.ListViewGroup() _
    {ListViewGroup1, ListViewGroup2})
ListViewGroup3.Header = "정회원"
ListViewGroup3.Name = "ListViewGroup1"
ListViewItem1.Group = ListViewGroup3
ListViewGroup4.Header = "준회원"
ListViewGroup4.Name = "ListViewGroup2"
ListViewItem2.Group = ListViewGroup4
ListViewItem3.Group = ListViewGroup3
Me.ListView1.Items.AddRange(New System.Windows.Forms.ListViewItem() _
    {ListViewItem1, ListViewItem2, ListViewItem3})
Me.ListView1.LargeImageList = Me.ImageList2
Me.ListView1.Location = New System.Drawing.Point(0, 0)
Me.ListView1.Name = "ListView1"
Me.ListView1.Size = New System.Drawing.Size(282, 211)
Me.ListView1.SmallImageList = Me.ImageList1
Me.ListView1.TabIndex = 0
Me.ListView1.UseCompatibleStateImageBehavior = False
Me.ListView1.View = System.Windows.Forms.View.Tile
728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
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
글 보관함