C Visual Basic Programming - 리스트 박스

Cugain 2007.02.21 11:35 조회 수 : 206 추천:83

sitelink1 http://myhome.hanafos.com/~log0/visual_basic.htm 
sitelink2  
extra_vars5  
extra_vars6  

 

비베강좌(7)<--리스트박스

 

 


 

 


비베 한달이면 한국불패만큼 한다. - 7 . 리스트 박스 -

오늘은 리스트 박스 컨트롤에 대해 공부해 보겠습니다.

- Tips -조건문과 루프 부분에 대해서는 따로 자료를 찾아보고 철저히 익혀 주십시오.

사실 프로그램이란거 이 두놈만으로 이루어 졌다고 해도 틀린말이 아닙니다. 그리고 변수에 대해서도 꼭 숙지해 주십시오.

여기에 대한 자세한 사항은 '프로그래밍 완전정복(CODE COMPLETE) -높이깊이사 -가격: 23,000 에 자세히 나와 있습니다.

1. 리스트 박스란 무엇인가

리스트 박스의 리스트(LIST)가 목록이란 뜻이 있다는 것은 모르는 분이 아마 없을 것입니다.

박스(BOX)는 상자를 의미 하고요.

우리말로 번역하자면 리스트 박스는 목록상자가 되는데요.

자료의 대부분은 목록의 형태를 띠고 있습니다. 예를 들어 우리반 학생들의 이름은 목록형 자료의 대표적인 것입니다.

출석부를 보면요.

1번 강길순
2번 강동진
3번 강동환
4번 김기석
  .
  .
  .
44번 황철호

이런식의 목록이라는 것을 알수 있습니다.

바로 이런 목록형 자료를 다룰때 편리하게 사용하라고 만들어 놓은것이 리스트 박스입니다.

2. 목록의 특징

위의 출석부를 보면 이름 앞에 번호가 붙어 있습니다.

목록의 가장큰 특징은 자료하나하나에 순번이 매겨져 있다는 것입니다.

그렇기 때문에 전체 항목(ITEM)의 갯수도 쉽게 알수 있습니다.

3. 항목의 추가 삭제

출석부의 자료는 언제나 그대로 있지 않습니다.

어느날 3번 강동환 학생이 가출을 하여 퇴학을 당할 수도 있고 옆학교에서 구항진이란 친구가 전학을 올수도 있습니다.

실제 학교의 출석부 같은경우 종이위에 쓴 목록이기 때문에

퇴학을 당하거나 전학을 온다고 해서 목록이 전체적으로 바뀌지는 않습니다.

하지만 원칙적으로 본다면 3번 강동환 학생이 퇴학을 한경우에는

1번 강길순
2번 강동진
3번 김기석 * (3번 강동환 이 삭제됨)
4번 김동수 *
  . *
  . *
  . *
43번 황철호 * (전체 학생수는 43명임)

로 목록이 수정되어야 합니다. 그리고 구항진 학생이 전학을 온 경우에는

1번 강길순
2번 강동진
3번 구항진 * ( 구항진 학생이 추가됨 )
4번 김기석 *
  . *
  . *
  . *
44번 황철호 * ( 전체학생수가 44명이됨)(참고: 위 이름들은 제 친구들의 이름입니다. )

로 목록은이 수정되어야 하고요.

그럼이와같은 목록의 순번과 전체항목의 갯수, 항목의 추가, 삭제등을 리스트 박스에서는 어떻게 구현하는 지 설명해
드리겠습니다.

1. 순번과 전체 항목(ITEM)의 갯수

순번과 전체 항목의 갯수는 목록의 속성이라고 할수 있습니다.

이때 순번이라함은 선택된아이템의 번호를 의미합니다.(리스트박스에서 선택된 항목은 파란색 띠로 표시되며 글자는
반전됩니다.)

리스트 박스(ListBox)의 속성(Porperty)중 ListIndex는 선택된 아이템의 번호를 의미합니다.

ListCount는 리스트 박스에 포함된 아이템의 개수를 의미하고요.

2. 항목(Item)의 추가,삭제

항목의 추가, 삭제는 명령문을 사용해서 해야하는데요.

저번 강좌에서 명령문 같은것을 메서드라고 했지요.

항목 그러니까 아이템을 추가, 삭제할때는 Additem(아이템 추가) 메서드와 RemoveItem (아이템 삭제) 메서드를 사용합니다.

이들의 구체적인 사용법은

list1.AddItem 추가하고자하는 문자열 , index

여기서 index값을 생략할경우 목록의 끝에 항목을 추가합니다.

list1.RemoveItem index

RemoveItem 메소드의 경우에는 인덱스를 생략 해서는 않됩니다.

그리고 때에 따라 목록에 있는 모든 항목을 삭제 해야할 경우가 있는데 이때는 Clear 메소드를 사용하면 됩니다.

list1.Clear하면 됩니다.

3. 각 항목들은 어디에 저장이 되어 있는 것일까?

AddItem 메서드를 사용해 추가한 항목들은 어디에 저장이 될까요?

저도 이것이 몹시 궁금 했습니다.

만약 따로 저장하는 장소가 없다면 배열문을 선언해서는 일일이 저장해주어야 하지 않을까 하는 생각을 했지요.

그런데 그럴필요는 없습니다. 왜냐하면 리스트박스에는 List속성이 있기 때문이죠.

만약 위에 나와 있는 출석부를 리스트 박스로 만든다면 list()에 저장됩니다.

list()은 배열을 의미하는데요. 내일 배열에 대해서는 자세히 강좌를 하겠습니다.

list(0)="강길순"
list(1)="강동진"
list(2)="강동환"
  .
  .
  .
list(43)="황철호"

이때 주의 해야할 사항은 1번 강길순 학생의 인덱스가 0이라는 사실입니다.

===> ()안의 숫자는 그항목의 listindex 값을 의미합니다.

전체 항목의 갯수를 나타내는 listcount값은 44가 되겠죠.

그러니까 황철호 학생이 마지막 학생인데 이학생의 인덱스 번호+ 1 이 총 항목의 갯수가 됩니다.

( listcount = 마지막 항목의 인덱서 번호 + 1 )

( 마지막 항목의 인덱스 번호 = listcount - 1 )

Visual Basic Programming Bible Ver 5에 수록되어 있는 예제를 인용합니다.


컨트롤 이름   컨트롤 종류   수정이 필요한 프로퍼티      수정 내용
 frmList
lst아이템
lbl추가아이템
lbl현재아이템
txt아이템
 cmd추가
 cmd삭제
 cmd이전
 cmd다음
 lbl정보
 cmd종료
                폼
            리스트 박스
              레이블
              레이블
            텍스트 박스
            커맨드 버튼
            커맨드 버튼
            커맨드 버튼
            커맨드 버튼
              레이블

           커맨드 버튼
                                caption

                                caption
                                caption
                                 text
                                caption
                                caption
                                caption
                                caption
                                caption
                              BorderStyle
                                caption
                                               "리스트 박스 예제"

                                                "추가할 아이템"
                                                  현재 아이템
                                                       ""
                                                     "추가"
                                                     "삭제
                                                   "<< 이전"
                                                   "다음 >>"
                                                       ""
                                                       1
                                                    "끝내기"



'*******************************************************
'lst아이템의 클릭 이벤트 핸들러
'*******************************************************
Private Sub lst아이템_click()
lbl정보.Caption = str(lst아이템.ListIndex) & " :" & chr(13)&chr(10)& _
             lst아이템.List(lst아이템.ListIndex)
End Sub

'*******************************************************
' cmb추가의 클릭 이벤트 헨들러
'*******************************************************
Private Sub cmb추가_Click()
If txt아이템.Text <> "" then
 lst아이템.AddItem txt아이템
End if
End Sub

'********************************************************
' cmb삭제의 클릭 이벤트 헨들러
'********************************************************
Private Sub cmb삭제_click()
Dim index As integer

index = lst아이템.ListIndex
If index >= 0 Then
 lst아이템.RemoveItem index
 If index >= lst아이템.ListCount Then index = index - 1
 lst아이템.ListIndex = index
End if
End sub

'********************************************************
' cmb이전의 클릭 이벤트 핸들러
'********************************************************If lst아이템.Listindex > 0 Then
   lst아이템.ListIndex = lst아이템.ListIndex - 1
End if
End sub

'*********************************************************
' cmb다음의 클릭 이벤트 핸들러
'*********************************************************
Private Sub cmb다음_Click()
If lst아이템.ListIndex < lst아이템.ListCount - 1 Then
 lst아이템.ListIndex = lst아이템.ListIndex + 1
End if
End sub

'**********************************************************
' cmb종료의 클릭 이벤트 핸들러
'**********************************************************
Private Sub cmb종료_Click()
End
End sub


소스에 대한 의문 사항이 있으신 분은 메일 주시면 자세히 설명드리겠습니다.

그리고 소스를 인용한 책은 비베를 시작한지 한두달 되신 약 중급자 분들에게 상당한 도움이 되리라 생각되며




--------------------------------------------------------------------------------