콤보 박스
콤보박스(ComboBox) 컨트롤은 텍스트박스와 리스트 박스 컨트롤을 결합시켜 놓은 컨트롤입니다. 텍스트박스에서 직접 문자열을 입력할 수도 있으며 리스트 박스에서 항목을 선택할 수도 있습니다. 리스트박스는 여러 개를 선택할 수 있으나 콤보박스는 한가지만 선택할 수 있습니다
콤보박스 컨트롤은 Style속성을 이용하여 3가지 형태를 만들 수 있습니다. '0-드롭다운 콤보'는 일반적인 콤보박스 형태로 텍스트에서 문자열을 편집하거나 목록에서 항목을 선택할 수 있습니다.
'1-단순콤보'는 텍스트에서 문자열을 편집하거나 방향키(↑,↓)를 이용하여 리스트 항목을 선택할 수 있습니다. '2-드롭다운 목록'은 텍스트에서 문자열을 편집할 수 없으나 목록에서 항목을 선택할 수 있습니다.
[Style 속성에 따른 콤보박스 종류 화면] |
속 성 설 명 | |
Text | 콤보박스의 텍스트에 문자열을 넣는다. |
Locked | 콤보박스를 설정할 수 없게 한다. True이면 입력하거나 선택할 수 없고 False면 입력하거나 선택할 수 있다. |
List(인덱스 번호) | 인덱스번호를 이용하여 리스트의 항목을 알아내거나 인덱스번호를 이용하여 문자열을 추가할 수 있습니다. 인덱스 번호는 0부터 시작한다. |
ListCount | 콤보박스의 항목 총수를 구한다. |
ListIndex | 선택한 현재 항목의 위치를 인덱스로 표시한다. |
RemoveItem(인덱스 번호) | 인덱스번호를 이용하여 항목을 지운다. |
AddItem(문자열) | 문자열을 항목에 추가한다. |
Selected(인덱스 번호) | 인덱스번호를 이용하여 항목을 선택했는지 알아낸다. |
Clear | 항목을 모두 지운다. |
Sorted | 항목을 정렬한다. |
리스트 박스
리스트박스 컨트롤은 직사각형 모양의 목록으로 윈도우즈에서 많이 사용합니다. 비주얼베이직의 리스트박스는 Style속성을 이용하여 체크 리스트 박스를 만드는 것도 가능합니다.
리스트박스 컨트롤을 체크 리스트 박스형태로 사용하려면, Style속성을 '1-확인란'으로 변경하면 됩니다. 초기 값은 '0-표준'으로 되어 있습니다.
[Style 속성에 따른 모양 출력 화면] |
리스트박스는 콤보박스와 달리 새로운 문자열을 사용자가 입력하여 추가할 수는 없고 단순히 리스트에서 선택하여 한 개 또는 그 이상을 고를 수 있습니다. 한 개 이상을 선택할 경우에는 MultiSelect속성을 '1-단순형'이나 '2-확장형'으로 설정해야 합니다.
'1-단순형'은 항목을 선택할 경우에 키나 키를 누르고 마우스 왼쪽 버튼으로 다른 항목을 누르면 계속 항목이 선택됩니다.
'2-확장형'은 키를 누른 후 마우스 오른쪽 버튼을 누르면, 한꺼번에 많은 항목을 선택할 수 있습니다. 또, 키를 이용하여 여러 항목을 선택할 수 있습니다.
[MultiSelect 속성에 따른 화면] |
리스트박스 컨트롤은 항목을 추가할 때마다 인덱스번호를 부여합니다. 첫 번째 들어간 항목은 인덱스 번호가 0번입니다. 항목이 추가로 들어 갈 때마다 1씩 증가합니다.
항목을 추가하는 방법은 세 가지 방법이 있습니다. 첫 번째 방법은 [속성창]의 List속성에서 입력하는 것입니다. 예를 들어, '신문섭'과 '이호정'을 항목에 추가로 넣고 싶다고 하면 다음과 같이 하면 됩니다.
List 속성에 항목을 넣는 화면 |
[속성창]을 이용하는 방법은 일반적으로 리스트박스 컨트롤의 초기 항목을 넣을 때 이용합니다. 항목입력은 Enter키를 이용하여 입력합니다.
두 번째 방법은 AddItem메서드를 이용하는 방법입니다. 추가할 항목이름과 인덱스번호를 넣어 추가하는 방법입니다.
' 신문섭은 인덱스 0번이 된다.
List1.AddItem "신문섭",0
' 이호정은 인덱스 1번이 된다.
List1.AddItem "이호정",1
AddItem메서드는 인덱스번호를 입력하지 않고 생략이 가능합니다. 처음 추가한 항목의 인덱스가 0번이 되고 추가할 때마다 1씩 증가해서 자동으로 들어갑니다.
' 신문섭은 인덱스 0번이 된다.
List1.AddItem "신문섭"
' 이호정은 인덱스 1번이 된다.
List1.AddItem "이호정"
세 번째 방법은 List속성을 이용하는 것입니다. List속성을 이용하여 항목을 넣으려면, 꼭 인덱스 번호를 입력해야 합니다.
' 신문섭은 인덱스 0번이 된다.
List1.List(0) = "신문섭"
' 이호정은 인덱스 1번이 된다.
List1.List(1) = "이호정"
일반적으로 항목을 추가할 때는 List속성보다 AddItem속성을 많이 사용합니다. 그 이유는 인덱스번호를 입력하지 않아도 되기 때문입니다.
주의사항 | 리스트박스 컨트롤에서 항목을 추가할 때, 인덱스 번호를 0에서 시작해서 1씩 증가해서 넣기 바랍니다. 만약 다음과 같이 하면 에러가 발생합니다. ' 인덱스 배열 순서가 잘못되었다는 에러 메시지가 나타난다. List1.List(1) = "이호정" List1.List(0) = "신문섭" |
자주 사용되는 속성은 다음과 같습니다.
속 성 | 설 명 |
List(인덱스 번호) | 인덱스번호를 이용하여 목록의 항목을 알아내거나 인덱스번호를이용하여 문자열을 추가할 수 있다. 인덱스 번호는 0부터 시작한다. |
ItemData(인덱스 번호) | 생성된 항목의 인덱스 번호를 설정한다. |
ListCount | 리스트박스의 항목 총수를 구한다. |
ListIndex | 선택한 현재 항목의 위치를 인덱스로 표시한다. |
RemoveItem(인덱스 번호) | 인덱스번호를 이용하여 항목을 지운다. |
AddItem(문자열) | 문자열을 항목에 추가한다. |
Selected(인덱스 번호) | 인덱스번호를 이용하여 항목을 선택했는지 알아낸다. 선택한 항목이면 True값을 전달하고 선택하지 않은 항목이면 False값을 전달한다. |
Clear | 항목을 모두 지운다. |
Sorted | 항목을 정렬한다. |
Sorted속성이 True인 상태에서 새로운 항목을 추가할 경우 추가된 항목은 정렬된 위치에 삽입됩니다. 주의할 점은 Sorted 속성은 항목을 보여주는 순서를 정렬하는 것이 아니라 실제로 문자열 목록의 배치 상태를 정렬합니다. 따라서 일단 Sorted 속성을 True로 설정하면 다시 False 로 바꾸어도 원래대로 돌아오지 않습니다. 주의하시기 바랍니다.
▶ 선택한 문자열 라벨에 출력하기
현재 선택한 라벨 컨트롤에 출력하기 위해서는 ListIndex속성을 이용하여 선택한 인덱스 값을 알아내야 합니다. 그런 후에 그 인덱스 번호를 이용하여 List속성에 넣은 후 라벨컨트롤의 Caption에 넣으면 선택한 문자열을 출력할 수 있습니다.
' 명령버튼을 누르면 수행한다.
Private Sub Command1_Click()
'리스트박스(List1) 컨트롤에서 선택한 문자열을 라벨(Label1) 컨트롤에 출력한다.
Label1.Caption = List1.List(List1.ListIndex)
End Sub
' 폼이 생성하면 수행한다.
Private Sub Form_Load()
' 리스트박스에 항목을 추가한다.
List1.AddItem "하나" ' 인덱스 0번
List1.AddItem "둘" ' 인덱스 1번
List1.AddItem "셋" ' 인덱스 2번
End Sub
참 고 | 선택한 한 개 항목을 삭제하려면 RemoveItem속성을 이용하여 다음과 같이 하면 됩니다. Private Sub Command1_Click() List1.RemoveItem(List1.Listindex) End Sub |
0 댓글