티스토리 뷰

728x90

윈도우 폼의 리스트 컨트롤(System.Windows.Forms.ListControl)에는 크게 3가지의 컨트롤을 사용할 수 있습니다. 리스트박스(ListBox), 콤보박스(ComboBox), 체크리스트박스(CheckedListBox)로 여러 데이터 항목에서 하나 이상을 선택 받거나, 항목 선택과 데이터입력을 동시에 지원하는 컨트롤입니다. 자동으로 스크롤을 지원하는등 간편한 사용법으로 목록 정보를 간편하게 출력하는 용도로 사용하는 개발자도 있습니다.

리스트박스의 내용은 .Items 속성으로 관리하며 폼 디자인 시점에 항목을 입력하려면 Items 속성 옆에 있는 [...] 버튼을 클릭해서 아래와 같은 문자열 컬렉션 편집기에서 필요한 데이터를 행단위로 입력하면 됩니다.


실행중에 항목을 추가하려면 .Items.Add(항목) 메소드를 사용할 수 있습니다. .Items 속성에서 사용할 수 있는 주요 메소드는 아래와 같습니다.

  • Add(항목), AddRange(항목 배열) : 개별 항목 추가 또는 배열로 일괄 항목 추가.
  • Clear() : 모든 항목 제거
  • IndexOf(항목) : 컬렉션내 항목의 인덱스를 리턴합니다. 리스트박스의 FindString() 메소드로도 리스트박스내 항목을 찾을 수 있지만 IndexOf()는 완전히 일치하는 항목을 찾고, FindString()는 지정한 문자열로 시작하는 항목을 찾습니다. 두가지 메소드 모두 차지 못하면 -1을 리턴합니다.
  • Insert(인덱스, 항목) : 인덱스 위치에 항목을 삽입합니다.(인덱스는 0부터)
  • Item(인덱스) : 컬렉션 내 지정 위치의 항목을 가져오거나 설정할 때 사용할 수 있습니다.
  • Remove(항목), RemoveAt(인덱스) : 항목 내용이나 인덱스로 지정한 항목을 삭제합니다.

실행중에 리스트박스 항목을 대량으로 추가하는 경우 데이터 추가와 화면 업데이트가 동시에 진행되므로 효율도 떨어지고 화면 깜박거림으로 사용자의 불편을 초래할 수 있습니다. 이런 경우에는 데이터 업데이트 이전에 리스트 박스의 .BeginUpdate() 메소드를 호출한 다음, 데이터 업데이트가 끝나면 .EndUpdate() 메소드를 호출해주면 데이터 업데이트와 화면 갱신간의 혼란을 방지 할 수 있습니다.
리스트박스의 내용과 모양에 영향을 줄수 있는 속성으로 .Sorted, .ScrollAlwaysVisible, .MultiColumn 등이 있습니다. Sorted 속성을 True로 설정하면 항목 내용을 알파벳 오름차순 순서로 자동 배열 합니다. 리스트박스의 스크롤바는 항목 내용에 따라 자동으로 보이는데 ScrollAlwaysVisible 속성을 True로 설정하면 항목 개수에 관계없이 항상 스크롤바가 보이도록 합니다. MultiColumn 속성은 리스트박스를 수직 목록으로 보이는 것이 아니라 리스트박스 높이로 목록을 잘라서 우측 열단위로 보이도록 합니다. 아래의 그림에서 우측의 리스트박스는 Sorted와 MultiColumn 속성을 True로 설정한 예제입니다.


리스트 박스의 핵심 용도는 여러 목록 중에서 하나 또는 여러 항목을 선택받는데 있는데 .SelectionMode 속성은 이 부분을 통제하는데 사용할 수 있습니다. SelectionMode 속성의 기본값은 "One"으로 단 하나의 항목만 선택받을 수 있고 "None"으로 설정하면 리스트박스는 출력용으로만 사용할 수 있습니다. "MultiSimple"은 단순한 형태로(클릭하면 선택, 다시 클릭하면 선택 해제) 여러 항목을 선택할 수 있습니다. "MultiExtended"는 Ctrl(비연속 다중 선택), Shift(연속 다중 선택), 방향키 등을 활용하여 자동 선택할 수 있도록 해줍니다. 다음은 항목 선택과 관련하여 사용할 수 있는 속성과 메소드입니다.

  • Selectedlndex : 현재 선택된 항목의 인덱스(0부터 시작)
  • Selectedlndices : 현재 선택된 모든 항목의 인덱스(다중 선택시)
  • Selectedltem : 현재 선택된 항목의 내용
  • Selectedltems : 현재 선택된 모든 항목의 내용
  • Text : 현재 선택된 항목의 텍스트로 Selectedltem.ToString()과 동일한 결과입니다.
  • Toplndex : 리스트박스에서 현재 보여지고 있는 항목들 중에 첫항목의 인덱스
  • ClearSelected() : 리스트박스의 모든 항목을 선택 해제 합니다.
  • GetSelected(인덱스) : 지정한 인덱스의 항목이 선택 상태면 True 리턴
  • SetSelected(인덱스, 선택여부) : 지정한 인덱스의 항목을 True/False 선택 여부로 선택 또는 선택 해제합니다.

주소 입력창에서 시도-시군구-읍면동을 상호 연계해서 입력받는 경우에는 상위 리스트 박스의 선택 항목 변경은 즉시로 하위 리스트 박스의 내용 변경으로 연결되어야 합니다. 이런 경우 처럼 리스트 박스의 선택 항목 변경을 처리하려면 SelectedIndexChanged 이벤트를 처리하면 됩니다.



리스트박스의 변형인 체크리스트박스는(CheckedListBox) 리스트 개별 항목에 체크박스를 두어 보다 명확한 선택을 할 수 있도록 하는 컨트롤입니다. 기본적으로는 항목을 선택한다고 체크박스가 선택되는 것이 아니고 항목 선택 상태에서 다시 클릭해야 체크박스를 선택/선택해제 할 수 있습니다. .CheckOnClick 속성을 True로 설정하면 항목 클릭시 체크박스와 바로 연동하도록 할 수 있습니다. 대부분의 속성과 메소드는 리스트박스를 준용하며 체크리스트박스의 부가적인 속성 및 메소드는 아래와 같습니다.

  • Checkedlndices : 현재 체크된 항목의 인덱스를 배열로 리턴합니다.
  • Checkedltems : 현재 체크된 항목을 배열로 리턴합니다.
  • GetltemChecked(인덱스) : 인덱스로 지정한 항목이 체크되어 있으면 True를 리턴합니다.
  • SetItemChecked(인덱스, 상태) : 인덱스로 지정한 항목을 체크/언체크 합니다.

체크리스트박스는 항목 선택과 함께 체크/언체크 상태도 존재하기 때문에 이벤트도 선택 항목의 변경때 발생하는 SelectedIndexChanged 이벤트와 함께 항목의 체크 상태가 변경할 때 발생하는 ItemCheck 이벤트를 활용할 수 있습니다.


마지막으로 콤보박스(ComboBox) 컨트롤은 리스트박스와 텍스트박스가 합쳐진 형태로 사용자가 직접 내용을 입력할 수도 있고 드롭다운리스트에서 항목을 선택해서 입력할 수도 있습니다.



콤보박스 컨트롤은 .DropDownStyle 속성으로 컨트롤의 종류를 지정할 수 있습니다. 위의 예제는 좌측 부터 차례로 Simple, DropDown, DropDownList 로 지정한 것입니다. Simple는 텍스트박스 하단에 단순한 리스트박스를 배치한 것으로 실행중 컨트롤의 크기나 모양의 변경은 없습니다. "DropDown"은 기본적으로 텍스트박스로 데이터 입력을 받지만 마우스로 클릭하면 리스트가 보여져서 여러 항목중 하나를 선택하여 입력할 수 있도록 합니다. "DropDownList"는 직접 텍스트를 입력할 수 없고 클릭하면 리스트가 보여져서 항목을 선택할 수 있도록 합니다. 클릭했을때 보여지는 리스트박스의 크기는 DropDownHeoght, DropDownWidth 속성으로 지정할 수 있습니다.

리스트박스의 속성과 메소드를 준용해서 사용하면 되지만 콤보박스에서는 다중 선택관련 기능은 지원하지 않음에 주의합니다. 또한 텍스트박스 기능도 있으므로 TextMaxLength, SelectedText, SelectionLength, SelectionStart, Select(), SelectAll()와 같은 속성과 메소드를 사용할 수 있습니다.(윈도우 폼 텍스트박스 다루기 참조) 콤보박스 연관 이벤트는 선택 항목의 변경때 발생하는 SelectedIndexChanged 이벤트와 함께 드롭다운리스트가 열릴때 발생하는 DropDown 이벤트, 텍스트박스 내용이 바뀔때 발생하는 TextChanged를 활용할 수 있습니다.


728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
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 31
글 보관함