visual basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/vb/vb.pdf · 것만 알아두시면 됩니다....

104
Visual Basic 6.0 1. 부담없이 시작합니다 시중에 볼만한 VB서적들 500쪽 넘는 거 기본입니다. 그럴 만도 합니다. 프로그래밍 언어라는 것이 설명하기 시작하면 한도 끝도 없는 것입니다. 게다가 프로그래밍 서적 살 사람이면 최소한 그 정도 극복할만한 사람이다,라고 생각합니다. 이 강좌가 시중의 책으로 따지자면 몇 쪽 분량이 될지는 모르겠습니다. 아마도 시중의 책보다는 훨씬 얇은 수준이 아닐까 생각합 니다. 왜냐하면 어디까지나 제가 설명하기 쉬운 방식대로만 쓸 것이고, 그러자면 시중의 책처럼 시시콜콜한 얘기 다 못쓰니까 말 입니다. 한 강좌를 길게 못 씁니다. 눈이 아프니까요. ^^. 짧게 짧게 끊어서 그냥 부담없는 정도의 수준으로 강좌를 이어가겠습니 다. 그래야 제가 편하고, 편하게 글을 써야 독자 제위께서도 별 부담이 없을 테니까 말이죠. 2. 시작이 반, VB를 실행하다 여전히 프로그래밍이라면 무진장 어려운 것으로 생각하는 사람들이 많습니다. 물론 쉽지 않죠. 그러나 생각만큼 어렵지도 않습니 다. 우리가 아래아한글이나 엑셀같은 엄청난 프로그램을 만드는 것도 아니고 지금 당장 중요한 프로그램을 짜야하는 것도 아니니 까 말입니다. 단지, 그냥 재미로, 비주얼베이직이 이런 것이구나∼ 이런 것도 할 수 있구나∼하는 정도만 알면 되니까 말입니다. 물론 여기에서 그쳐서는 안되죠. 이왕 칼을 뽑았으니 윈도 보조프로그램의 '계산기' 정도는 만들어 보고, 좀 더 나아가서 데이터 베이스를 쬐끔 이용하여 ○○관리프로그램도 만들어 봐야겠죠. 사이트를 뒤져보면 VB로 짠 프로그램이 무궁무진합니다. 그 중 몇 개를 골라 비슷하게 짤 수 있을 정도의 실력은 되어야죠? 이 강좌의 목표는 거기까지입니다. 생각보다는 꽤 높죠? 그렇다면, 일단 VB를 실행하세요. 버전은 6.0을 기준으로 하겠습니다. 어떻게 구하고 어떻게 설치하느냐구요? 그런 거는 이 강좌에서 다루 지 않겠습니다. 구하는 거야 돈만 있으면 되고 설치하는 거야 그냥 CD 넣으면 자동으로 됩니다. (VB는 마이크로소프트의 Visual Studio의 CD에 들어있습니다. Visual Studio에는 VB 외에 비주얼 C, 비주얼 FoxPro 등등 여러 개발 언어가 있습니다.) 실행하자마자 뭔가를 선택해야되죠? 그냥 기본적으로 선택된 '표준 EXE'를 <열기>하면 됩니다. 일반적으로 프로그램을 만들어 최종적으로 실행 파일을 만들면 끝에(확장자가) exe가 붙죠? 그래서 기본으로 선택된 '표준 EXE'를 선택한 것입니다. 그 외에 'ActiveX EXE' 'ActiveX DLL' 등 여러 가지가 있는데, 나중에 해봅시다. 첫술에 배부르지는 않는 법이니까요. 1

Upload: vungoc

Post on 12-Feb-2018

249 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

Visual Basic 6.0

1. 부담없이 시작합니다

시중에 볼만한 VB서적들 500쪽 넘는 거 기본입니다. 그럴 만도 합니다. 프로그래밍 언어라는 것이 설명하기 시작하면 한도 끝도

없는 것입니다. 게다가 프로그래밍 서적 살 사람이면 최소한 그 정도 극복할만한 사람이다,라고 생각합니다.

이 강좌가 시중의 책으로 따지자면 몇 쪽 분량이 될지는 모르겠습니다. 아마도 시중의 책보다는 훨씬 얇은 수준이 아닐까 생각합

니다. 왜냐하면 어디까지나 제가 설명하기 쉬운 방식 로만 쓸 것이고, 그러자면 시중의 책처럼 시시콜콜한 얘기 다 못쓰니까 말

입니다. 한 강좌를 길게 못 씁니다. 눈이 아프니까요. ^^. 짧게 짧게 끊어서 그냥 부담없는 정도의 수준으로 강좌를 이어가겠습니

다. 그래야 제가 편하고, 편하게 글을 써야 독자 제위께서도 별 부담이 없을 테니까 말이죠.

2. 시작이 반, VB를 실행하다

여전히 프로그래밍이라면 무진장 어려운 것으로 생각하는 사람들이 많습니다. 물론 쉽지 않죠. 그러나 생각만큼 어렵지도 않습니

다. 우리가 아래아한글이나 엑셀같은 엄청난 프로그램을 만드는 것도 아니고 지금 당장 중요한 프로그램을 짜야하는 것도 아니니

까 말입니다. 단지, 그냥 재미로, 비주얼베이직이 이런 것이구나∼ 이런 것도 할 수 있구나∼하는 정도만 알면 되니까 말입니다.

물론 여기에서 그쳐서는 안되죠. 이왕 칼을 뽑았으니 윈도 보조프로그램의 '계산기' 정도는 만들어 보고, 좀 더 나아가서 데이터

베이스를 쬐끔 이용하여 ○○관리프로그램도 만들어 봐야겠죠.

사이트를 뒤져보면 VB로 짠 프로그램이 무궁무진합니다. 그 중 몇 개를 골라 비슷하게 짤 수 있을 정도의 실력은 되어야죠? 이

강좌의 목표는 거기까지입니다. 생각보다는 꽤 높죠?

그렇다면,

일단 VB를 실행하세요. 버전은 6.0을 기준으로 하겠습니다. 어떻게 구하고 어떻게 설치하느냐구요? 그런 거는 이 강좌에서 다루

지 않겠습니다. 구하는 거야 돈만 있으면 되고 설치하는 거야 그냥 CD 넣으면 자동으로 됩니다. (VB는 마이크로소프트의 Visual

Studio의 CD에 들어있습니다. Visual Studio에는 VB 외에 비주얼 C, 비주얼 FoxPro 등등 여러 개발 언어가 있습니다.)

실행하자마자 뭔가를 선택해야되죠? 그냥 기본적으로 선택된 '표준 EXE'를 <열기>하면 됩니다. 일반적으로 프로그램을 만들어

최종적으로 실행 파일을 만들면 끝에(확장자가) exe가 붙죠? 그래서 기본으로 선택된 '표준 EXE'를 선택한 것입니다. 그 외에

'ActiveX EXE' 'ActiveX DLL' 등 여러 가지가 있는데, 나중에 해봅시다. 첫술에 배부르지는 않는 법이니까요.

1

Page 2: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

그러면 아래와 같은 화면이 보이죠? 프로그램을 짤 수 있는 가장 일반적인 모습입니다. 시작하자마자 Form1이라고 해서 흔히

말하는 폼 창이 하나 떠 있습니다. 폼이란 우리가 흔히 말하는 '창(Window)'를 말합니다. 개의 프로그램은 하나 이상의 창을

가지고 있죠. 그래서 프로그램을 시작하자마자 창이 하나 자동으로 생긴 것입니다.

이제 이 폼을 이용해 다음과 같은 프로그램을 만들어 봅니다. 단추를 누르면 "뭘 봐?"가 나타나는 정말 유치한 프로그램입니다.

다음과 같이 따라해 보세요.

① 왼쪽 컨트롤 도구상자에서 TextBox 컨트롤을 클릭한 후, 폼 창의 원하는 위치에 마우스로 드래그하여 글상자 하나를 만든다.

② 마찬가지로 컨트롤 도구상자에서 CommandButton 컨트롤을 클릭한 후, 같은 방법으로 명령 단추 하나를 만든다.

③ 마우스로 이리 저리 조절해서 위치와 크기를 적당히 조절한다.

됐죠? 무지 쉽죠? 예전에 (도스 시절에) 이 정도로 보이는 프로그램을 짤려면 그야말로 힘들었습니다. 그래서 도스용 프로그램을

짤 때 첨에는 그냥 문자만 보이는 것을 예로 들곤 하죠. 가장 잘 드는 예로 "Hello"라는 메시지가 화면에 표시되게 하는 것이었

습니다. 지금처럼 텍스트 박스 만들고 명령 단추 만들고...이런 작업은 고수들이나 하는 작업이었습니다.

어찌됐건 (이 글을 읽고 있는 분들 도스 시절의 프로그래밍 언어 안 써 보신 분들 100%라고 믿고...) 세상 참 좋아졌습니다.

위에서 만든 폼 위에 그려놓은 것들을 우리는 컨트롤이라고 부릅니다. 그런데 이러한 컨트롤들을 그냥 그려넣는다고만 해서 프로

그램이 저절로 되는 것은 아닙니다.(VB는 인공지능 언어가 아닙니다.) 이제부터 뭔가 명령을 줘야죠... 프로그래밍은 이제부터 시

작입니다.

3. 컨트롤, 속성, 이벤트.... 왠 이벤트?

2

Page 3: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

폼 위에 그려놓은 두 개의 컨트롤에 우리가 원하는 결과가 나타나도록 프로그래밍을 해야됩니다. 그러나 겁먹지 마시길... 오늘

강좌 정도의 프로그래밍은 그야말로 식은 죽먹기.

먼저 아래 그림의 ①번에 기본적으로 "Text1"이라고 표시되죠? 이것을 아래 그림과 같이 빈 칸으로 만들어야 됩니다. 그러기 위

해서 먼저 ①번을 클릭한 다음, 오른쪽의 속성 창(속성 창이 어디냐구요? 앞의 강좌의 그림을 잠깐 보고 오시길...)에서 Text라는

이름을 찾아보세요. 그럼 오른쪽에 "Text1"이라고 씌어있죠? 이걸 지우면 됩니다. 그러면 왼쪽 폼 위의 ①번 텍스트 박스도 빈

칸이 되죠.

이것이 바로 속성입니다. 즉 텍스트 박스의 Text라는 속성값이 기존에는 Text1이었는데, 지금은 Text 속성값을 빈칸으로 만들었

습니다.(Text 속성 란에 다른 문자를 입력해보세요. 그럼 텍스트 박스에 표시됩니다.)

같은 방법으로 아래 ③번 커맨트 버튼의 Caption 속성 값도 바꿔보세요. 커맨드 버튼은 처음 만들 때 기본적으로 Command1,

Command2... 이런 식으로 만들어집니다. ③번을 선택하고 속성 창에서 Caption 속성을 찾아서 거기에 "Command1"이라고 씌

어진 것을 "눌러봐"로 수정하면 됩니다. (텍스트 박스의 Text 속성과 비슷한 것이 커맨드 버튼에는 Caption입니다.)

이렇게 해서 우리는 컨트롤에 속성 값을 변경하는 것을 해봤습니다. 무슨 말이냐구요? 텍스트 박스 컨트롤, 커맨드 버튼 컨트롤

의 Text 속성 값, Caption 속성 값을 각각 빈칸과 "눌러봐" 속성값으로 바꾸었다는 말입니다. 이제 '컨트롤'과 '속성'에 해서는

좀 아시겠죠?

그럼 본격적으로 <눌러봐> 버튼을 누르면 현재 빈칸으로 표시된 텍스트 박스에 "뭘 봐?"라는 문자가 나오도록 만들어 봅시다.

즉 우리가 커맨드 버튼을 누른다는 "행위"를 할 때 무언가 결과가 나타난다는 말인데, 이러한 행위를 '이벤트'라고 합니다. 즉 커

맨드 버튼이든 텍스트 박스이든 마우스로 누를 때 우리는 "클릭 이벤트가 발생했다"라고 합니다.

자, 그러면 폼 창에서 ①<눌러봐> 버튼을 더블클릭해보세요. 그럼 아래와 같이 직접 프로그래밍할 수 있는 코드 창이 나타납니

다.

3

Page 4: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

코드 창에서 아래와 같이 입력합니다.

Private Sub Command1_Click()

Text1.Text = "뭘 봐?"

End Sub

이미 첫째줄과 셋째줄은 표시되어 있죠? 여러분들은 가운데

Text1.Text="뭘 봐?"만 입력하면 됩니다.

뜻을 풀이하자면 Command1 버튼을 누르는 이벤트가 발생하면(Private Sub Command1_Click())

Text1이라는 텍스트 박스의 텍스트 속성 값을 "뭘 봐?"로 바꾸고(Text1.Text = "뭘 봐?")

끝내라(End Sub)는 뜻입니다.

쉽죠?

근데 아까 Command1은 "눌러봐"로, Text1은 빈칸으로 바꿨는데 왜 코드에는 그렇게 나타나냐구요? 우리가 전 강좌에서 바꾼

것은 겉모습 즉, Text나 Caption 속성 값만 바꾼 것이고 실제 이름(Name) 속성은 그 로 두었기 때문입니다. 다시 폼 창으로 돌

아가 텍스트 박스를 누르고 속성 창에서 제일 위에 있는 이름 속성을 확인해 보세요. 여전히 Text1으로 되어있죠? 커맨드 버튼

도 마찬가지입니다.

실제 프로그래머들은 이러한 컨트롤을 만들면 맨 먼저 Name 속성을 바꿉니다.(설명이 길어질까봐 일부러 안했었는데, 오히려 더

설명이 길어지고 있음. 우리도 다음 실습부터는 그렇게 합시다.)

4

Page 5: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

프로그램을 다 짰으니 이제 실행해 보죠.

상단 도구 모음줄에서 ③시작 단추(▶)를 눌러보세요. 그럼 좀 전에 만든 프로그램이 멋있게 실행될 것입니다. 프로그램이 실행

되면 <눌러봐> 단추를 클릭해보세요... "뭘 봐?"라는 메시지가 나오죠? (만약 안 나온다면 이 글 첨부터 다시 찬찬히 보고 해보세

요. 분명히 됩니다.)

또 마칠 때가 되었네요.

마치기 전에 지금까지 만든 것 저장해 놓고 마칩시다.

도구 모음에서 디스켓처럼 생긴 프로젝트 저장 단추(위 그림 ④번)을 눌러보세요. 처음에는 폼 파일 이름을 입력하라고 합니다.

파일 이름란에 "VB001"로 입력하고 저장합시다. 그러면 또 프로젝트 파일 이름을 입력하라고 합니다. 그러면 또 파일 이름을

"VB001"로 저장합시다.

폼 파일, 프로젝트 파일이 뭐냐구요? 담에 설명하죠. 오늘은 여기까지...

우리는 VB의 반을 알았습니다. 시작이 반이니까요.

다음 시간에는 이벤트, 속성, 메서드에 해 보다 자세하게 알아보죠.

4. 기초부터 탄탄히-속성, 메서드, 이벤트 이해하기

속성

먼저 비주얼베이직을 실행하고 '표준 EXE'를 선택하면 빈 폼이 열립니다. (앞으로 특별히 언급하지 않으면 항상 '표준 EXE' 상태

로 프로그램을 시작하기로 약속하죠.)

빈 폼에 텍스트박스 컨트롤을 아래 그림과 같이 추가합니다.(어떻게 하시는지 아시죠? 이미 앞에서 실습했습니다.)

그리고 오른쪽 하단에 속성 창을 보세요. 이미 이전에 실습해서 아시겠지만 여러 속성의 이름과 기본적인 속성 값들이 보입니다.

5

Page 6: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

텍스트 박스 컨트롤의 속성들을 자세히 살펴보면 모두 43 가지나 됩니다. 이 중에서 우리는 지난 시간에 이름 속성과 Text 속성

등을 바꿔봤습니다. 그 외에 텍스트 박스에 입력 또는 표시되는 글꼴의 모양을 변경할 수 있는 Font 속성, 텍스트 박스 테두리

모양을 변경할 수 있는 BorderStyle 속성, 배경색을 바꿀 수 있는 BackColor 속성 등 매우 많습니다.

각각의 컨트롤은 이많큼 많은 속성을 가지고 있습니다. 그럼 이 모든 속성을 다 외워야 하는가? 시간이 남아도시는 분은 그렇게

하셔도 될 것입니다. 그러나 개의 경우 몇 가지 자주 사용하는 속성만 기억하고 나머지 속성들은 충 그러한 것들이 있다는

것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레 여러 속성에 해 속속들이 알게될 것이

기 때문입니다.

속성을 바꾸는 방법은 두 가지가 있습니다. 먼저 기본적으로 위와 같은 속성 창에서 직접 그 값을 바꾸는 방법이 있습니다.

또 다른 방법으로는 코드 창에서 직접 바꾸는 방법이 있습니다. 실제 프로그램이 실행되는 도중에 사용자에 의해 속성값을 바꿔

야할 경우에 주로 사용되죠.

혹시 지난 강좌 실습 기억나시나요? <눌러봐> 버튼을 눌렀을 때 텍스트박스에 "뭘 봐?"라고 표시되었죠. 텍스트박스를 만들면 기

본적으로 Text 속성의 속성 값이 "Text1"입니다. 이것을 프로그래머가 처음에 ""(빈칸)으로 바꿨습니다. 그리고 사용자가 프로그

램을 실행하고 <눌러봐> 버튼을 눌렀을 때 ""(빈칸)이던 Text 속성값이 "뭘 봐?"로 바뀐 것이죠? 이해가 되시는지요?...... 이해가

될 때까지 이 문장 반복해서 보시길...

메서드

메서드는 영어로 method, 말 그 로 '방법'이라는 뜻입니다. 즉 어떤 개체(컨트롤)를 실행하는 방법을 말합니다. 어떤 폼을 보이

게 할 수도 있고, 숨기게 할 수도 있고, 그림을 그리거나 이동시킬 수도 있죠.

자, 그럼 폼 위의 Text1 텍스트 박스를 더블클릭하여 코드 창을 열어보세요.

그러면 아래와 같이 Private Sub Text1_Change( ) 함수가 기본적으로 나오죠.

그 아래 줄에 다음과 같이 Text2.을 입력합니다. 그러면 점(.)을 입력하는 순간 아래 그림과 같이 무언가를 선택할 수 있는 목록

6

Page 7: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

이 나타나죠. 이 목록이 바로 속성과 메서드 목록입니다. 검은 색 글씨만으로 된 것이 속성이고 녹색 아이콘이 붙어있는 것이 바

로 메서드입니다.

목록에서 SetFocus 메서드를 선택해서 Text2.SetFocus 라는 문장을 완성하세요.

Private Sub Text1_Change()

Text2.SetFocus

End Sub

이제 뜻을 살펴볼까요?

Text1 이라는 텍스트 박스에 Change 이벤트가 발생하면, 즉 텍스트 박스의 내용을 변경하면

Text2 라는 텍스트 박스로 포커스를 옮겨라, 즉 Text2 텍스트 박스로 커서가 이동합니다.

그러면 이제 [F5]를 누르거나 실행 버튼(▶)을 클릭하여 프로그램을 실행해 보세요. 그런다음 Text1 이라고 씌어진 부분에 글자

를 입력해 보세요. 단 한자를 입력하자마자 커서가 Text2 로 이동되는 것을 알 수 있습니다.

좀 어렵죠? 메서드에 한 적절한 예가 없어 SetFocus 메서드로 예를 들자니 다소 어렵게 느껴질 수도 있었겠습니다.

정리하자면 메서드는 개체(컨트롤 등을 말함)를 상으로 행해질 수 있는 일종의 함수를 말합니다. 그래서 속성과 마찬가지로 항

상 그 상이 되는 개체(위의 예에서는 Text2)를 명시하고 점(.)을 찍은 다음 뒤에 표시를 하게 됩니다.

이벤트

이벤트에 해서는 지난 강좌에서 설명드렸죠? 사용자가 행하는 어떤 '행위'라고 말입니다. 즉 커맨드 버튼을 클릭

(Command1_Click())하거나 더블클릭(Command1_DbClick)하는 행위, 텍스트 박스에 글자를 입력하거나 수정(Text1_Change())하

는 행위 등을 말합니다.

보기 메뉴에서 코드를 선택하여 코드 창을 열어봅시다.(코드 창을 여는 방법은 이 외에도 여러 가지가 있습니다. 폼을 더블클릭

하거나 특정 컨트롤을 더블클릭해도 열립니다.)

7

Page 8: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

아래 그림과 같은 코드 창에서 Text1 이라고 표시된 부분이 '개체' 목록을 나타내는 부분입니다. 쉽게 말하면 컨트롤 이름이라고

할 수 있습니다. (개체는 컨트롤보다는 광범위한 개념입니다만, 이것저것 다 설명하자면 너무 길어지니 그냥 컨트롤과 같은 것이

라고만 생각해주시기 바랍니다.) 현재 폼 위에 텍스트 박스를 두 개 그려넣었으니 Form1, Text1, Text2 라고 세 개의 개체가 표시

될 것입니다.

오른쪽의 Change 라고 표시된 부분은 '프로시저' 목록입니다. 쉽게 말하면 이벤트라고 할 수 있습니다.

우리가 폼 위에 컨트롤을 만들고 더블클릭하여 폼 창을 열면 기본적으로 가장 자주 실행되는 이벤트 프로시저가 표시됩니다. 예

를 들어 커맨드 버튼을 더블클릭하면 클릭 이벤트가 기본적으로 표시되고, 텍스트 박스 이벤트를 클릭하면 Change 이벤트가 기

본적으로 표시됩니다.

5. 예제로 익히는 VB 기초(1)-시계

오늘은 아주 간단한 프로그램 하나 만들어보죠. 아래 화면과 같이 현재 날짜와 시간을 보여주는 프로그램인데, 이를 통해 컨트롤

추가, 속성값 변경에서 이벤트 발생 시 처리 프로그래밍, 단축 키 기능까지 가능하도록 해보죠. 그런 다음 실제로 실행 파일을

만들어보죠.

8

Page 9: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

이렇게 말하니까 무지 복잡하겠구나하고 혹시 생각하셨다면 무지무지 실망하실 겁니다. 실제로 프로그램 코드는 단 두 줄만 필요

하니까요.

1. 비주얼베이직을 실행합니다.

2. 레이블 컨트롤, 커맨드 버튼 컨트롤, 타이머 컨트롤을 아래 그림과 같이 배치합니다.

3. 레이블 컨트롤의 속성 값을 다음과 같이 변경하세요. 어떻게 하시는지 아시죠?

o 폼

(이름) : frmTimer

Caption : 현재시간

o 레이블 컨트롤

(이름) : lblResult

BorderSyle : 1-단일고정

Caption : 현재시간입니다.

Font : 굴림, 12 포인트

o 커맨드 버튼 컨트롤

(이름) : cmdExit

Caption : 끝내기(&x)

Alt+x 를 눌러도 동일한 기능을 수행한다는 뜻입니다.

o 타이머 컨트롤

(이름) : tmrTimer

9

Page 10: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

Interval : 1000

Interval 값이 1000 이면 1 초마다 타이머를 실행하라, 즉 1 초마다 타이머 이벤트를 발생시키라는 뜻입

니다. Interval 은 1 초를 1000 으로 나눈 값을 기준으로 합니다.

4. 폼 위의 커맨트 버튼을 더블클릭하여 코드 창을 엽니다.

여기서 잠깐! 혹시 기억하나요? 이와 같이 특정 컨트롤을 더블클릭하면 가장 많이 실행하는 이벤트 함수가 나타난다는

것. 앞 강좌에서 말씀 드렸습니다. 그래서 커맨드 버튼을 클릭하면 클릭 이벤트 함수가 자동으로 나옵니다. 이와는 다르

게 그냥 코드 창을 보고 싶을 경우에는 [보기]메뉴에서 코드를 출력하거나 마우스 오른쪽 버튼을 누른 다음 [코드 보

기]를 선택하면 됩니다. 다 아는 것을 괜히 말했나? 쩝.

아래와 같이 cmdExit_Click() 함수에 End 를 추가합니다.

5. 폼 위의 타이머 컨트롤을 더블클릭하여 다시 코드 창을 엽니다.

아래 그림과 같이,

lblResult.Caption = Format(Now, "yyyy 년 mm 월 dd 일. AM/PM hh 시 mm 분 ss 초")를 추가합니다.

o 충은 이해가 가죠? lblResult.Caption 에 어떤 값을 집어넣으라는 뜻이죠.

o Format 함수는 서식을 설정할 때 사용합니다. 즉 날짜나 시간을 표시할 때 연도는 몇 자리로 표시하고 시 분

초를 어떻게 표시하느냐 하는 것을 지정합니다.

10

Page 11: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

위의 코드를 살펴보면 현재의 시간(Now)을 표시하되, 연도는 4 자리(yyyy), 월은 2 자리(mm), 일은 2 자리(dd)

로 표시하고, 시간을 표시하되 오전 오후를 구분하여 12 시간제로 표시(AM/PM)하고 시(hh), 분(mm), 초(ss)까

지 표시한다는 뜻입니다.

o 타이머의 Interval 속성값을 1000 으로 변경했던 거 기억하시죠? 즉 1 초마다 타이머 이벤트가 발생되도록 한 거

말입니다. 따라서 타이머 이벤트가 1 초마다 발생하면서 lblResult 의 캡션 값이 1 초마다 바뀝니다.

6. 파일을 저장합니다.

o 폼 파일 이름 : frmTimer

o 프로젝트 파일 이름 : 타이머

7. 아래 그림과 같이 [파일] 메뉴에 "타이머.exe 만들기"를 클릭합니다.

o 만약 위와 같은 메뉴가 보이지 않는다면 위에서 프로젝트 파일을 '타이머'라는 이름으로 저장하지 않았기 때문

입니다.

o 프로젝트 파일이 저장된 폴더에 '타이머.exe' 파일이 생성됩니다.

8. 탐색기로 를 더블클릭하여 실행해 보세요.

6. 예제로 익히는 VB 기초(2)-그래픽뷰어(상)

VB 프로그래밍에서 자주 사용하는 컨트롤들을 어떻게 설명할까 고민고민하다가 내린 결론이 "몸에 와 닿는 예제로 배우자"였습

니다. 그래서 지난 시간에 Timer 컨트롤과 Label 컨트롤, CommandButton 컨트롤을 이용하여 시계를 만들어 봤습니다. 이번 시

간에는 보다 고급적(?)인 프로그램을 하나 만들어 보죠.

간단한 그래픽 뷰어를 만들면서 Image, ListBox, ComboBox 컨트롤에 해 익히는 알아보도록 하죠.(그렇게 되면 지금까지 Text,

Label, CommandButton, Timer, Image, ListBox, ComboBox 컨트롤에 해 미약하지만 한번씩은 짚고 넘어가게 되네요.)

11

Page 12: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. 먼저 아래 그림과 같이 만들어 보세요.

o Label 컨트롤은 이미 앞 시간에 해봤으니 어떤 기능인지 아실 것이고...

o 위 그림에서 파란색 Image 컨트롤은 그림을 보여주는 기능을 합니다.

o 보라색의 ListBox 컨트롤과 연두색의 ComboBox 컨트롤은 모두 리스트를 보여주고 특정 항목을 고를 때 사용

하는 것입니다. ListBox 와 ComboBox 는 그 모양에서도 다소 차이가 나지만, LIstBox 는 정해진 목록에서만 선

택할 수 있고 ComboBox 는 목록에서 선택하거나 직접 입력할 수도 있다는 점이 다릅니다.

12

Page 13: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

2. 각각의 컨트롤에 다음과 같이 속성을 변경합니다.

o Image 의 BorderStyle 은 기본값이 0 입니다. 즉 테두리 표시가 없습니다. 이 값을 1 로 바꾸면 입체감있는 테두

리로 바뀝니다.

o Image 의 Stretch 속성의 기본값은 False 입니다. Stretch 는 우리말로 '잡아 늘이다''쭉 펴다'라는 뜻인 것은 아

시죠? 즉 우리가 위에서 그려놓은 Image 영역보다 그림 크기가 크든 작든 Image 영역에 맞추어 보이도록 하는

것입니다.

o Label 의 AutoSize 속성은 Label 의 Caption 문자열 길이에 맞춰 자동으로 너비를 조절하라는 것입니다. 만약

AutoSize 의 속성이 False 인 상태에서 Label 에 표시될 문자열이 길 경우 잘리게 된다는 말입니다.

o ComboBox 의 Style 을 '2 - 드롭다운 목록'으로 바꾸면 ComboBox 내의 목록에서만 선택할 수 있고 직접 어떤

값을 입력할 수는 없게 한다는 것입니다. 즉 ListBox 의 기능과 동일하게 한다는 뜻이죠.(모양만 다르고....)

3. 다음은 코드 창을 열어 아래와 같이 코딩해 봅시다.

코드 창 열 줄 아시죠? [보기] 메뉴의 제일 처음에 보이는 [코드]를 선택하면 됩니다. 그 외에도 여러 방법이 있지만...

o 위 그림의 보라색 부분에 보이는 것처럼 Form 개체에서 Load 이벤트를 선택합니다.

코드 창을 열 때 폼을 더블클릭해서 열면 자동으로 Form 의 Load 이벤트 함수가 표시됩니다. (앞에서 이미 설

명한 것 같은데...)

o 위의 ①과 같은 코드를 직접 입력합니다.

List1.AddItem 은 'List1'이라는 ListBox 에 항목을 추가하라는 메서드입니다.

즉, List1.AddItem "워드프로세서", 0 이라고 하면, 'List1'이라는 ListBox 에 '워드프로세서"라는 항목을 추

가하고, 이 '워드프로세서'라는 항목의 값을 '0'으로 지정한다는 뜻입니다.

Combo1.AddItem 문장도 같은 뜻입니다. ListBox 와 ComboBox 의 속성과 메서드는 거의 동일합니다.

o 다음 코드를 더 입력하기 전에 지금까지 입력한 결과를 확인하기 위해 [F5]를 누르거나 도구 모음에서 실행 단

추(▶)를 눌러 실행해 봅시다.

13

Page 14: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 리스트 박스에 위에서 입력한 4 가지 항목이 보이고, 콤보 박스를 클릭했을 때에도 4 개의 항목이 모두 보입니

까? 그러면 지금까지는 성공했습니다. 만약 안되는 분...... 본 강좌 처음부터 다시 한번 찬찬히 살펴보시기 바

랍니다.

7. 예제로 익히는 VB 기초(2)-그래픽뷰어(하)

바로 이어서 시작하겠습니다.

1. 먼저 소스 파일을 다운로드한 다음 그림 파일(4 개가 있습니다.)을 C:₩vb 실습 폴더에 모두 복사해 두세요.

2. 지난 시간에 작성한 파일을 불러와야죠. 탐색기로 프로젝트 파일("콤보와리스트.vbp")을 더블클릭하여 불러오면 되겠죠?

헉∼ 불러왔는데 아무 것도 안 보인다구요?

아래 그림과 같이 프로젝트 창에서 '폼'을 열고 아래의 'Form1 (콤보와리스트.frm)'을 더블클릭하면 됩니다.

3. 자, 이제 코드 창을 열어보세요.

지난 시간에 아래 ①번 코드까지 작성했었죠?

14

Page 15: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

이번 시간에는 ②와 ③과 같은 코드를 작성합니다. 너무 복잡하나요? 그렇지는 않습니다. 우선 ②와 ③의 코드는 파란색

으로 밑줄 친 부분을 제외하고는 완전히 동일합니다. 따라서 하나만 제 로 알면 되겠죠?

4. 일단 위의 그림 ②와 같이 입력하세요.

먼저 List1 개체의 Click 이벤트를 선택하고 다음 코드를 입력합니다.(이 말이 무슨 뜻인지 모르시면 바로 앞 강좌를 다

시 보세요.)

o Label1.Caption = List1.List(List1.ListIndex)

전 시간에 입력한 ①번 내용 기억납니까? List.AddItem 메서드를 사용해 리스트 박스에 항목들을 추가했었죠.

항목과 함께 번호도 함께 붙였던 것 기억나시죠?

List.AddItem "워드프로세서", 0 중에서 숫자 0 에 해당하는 것이 ListIndex 입니다. 따라서 위의 코드를 괄호 안

에서부터 해석하자면 'List1'이라는 리스트 박스의 0 번에 해당하는 항목(문자열)으로 Label1.Caption 속성을 바

꾸라는 뜻입니다. (이해가 안 되시면 다시 읽어보세요...^^;)

o Select Case List1.ListIndex

Select Case ∼ End Select 제어문입니다. List1.ListIndex 의 값에 따라 여러 가지 일을 수행하도록 하는 코드입

니다.

비주얼베이직으로 코딩할 때 자주 쓰이는 제어문으로는,

15

Page 16: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

If Then ∼ End If

Select Case ∼ End Case

For ∼ Next

While ∼ Wend

Do ∼ Loop

등이 있습니다.

모두 일정한 조건을 주고 그 조건에 따라 어떤 일을 수행하도록 하는 역할을 합니다.

o Case 0

윗 줄의 Select Case List1.ListIndex 에서 List1.ListIndex 의 값이 0 이라면 다음 줄의 코드를 실행하라는 뜻입니

다.

위의 ①번 코드를 보면 알듯이 List1.ListIndex 의 값이 0 이면 "워드프로세서" 항목을 선택한 것이고, 1 이면 "컴

퓨터활용능력", 2 이면 "정보처리기능사", 3 이면 "정보기기운용기능사"를 선택했다는 뜻입니다. 즉 Case 0 은 '리

스트 박스에서 "워드프로세서" 항목을 선택했다면' 이라는 뜻이 되겠죠.

o Image1.Picture = LoadPicture("c:₩vb 실습₩워드.gif")

LoadPicture()함수는 이름 그 로 그림을 불러오는 역할을 합니다. 그렇게 불러온 그림으로 Image1 의 Pciture

속성을 바꾸라는 뜻이죠.

5. ②와 같이 모두 입력했으면, 이제 ③을 입력해 보세요.

Combo1 개체의 Click 이벤트를 선택하고 위의 그림에서 ③번 코드를 입력합니다. ②와 다른 점은 List1 을 Combo1 으

로 바꾼 것 외에는 없습니다. 즉 ListBox 와 ComboBox 의 속성이나 메서드는 거의 동일합니다.

6. 다 됐습니다. 이제 실행해도 됩니다. [F5] 키나 실행 단추(▶)를 눌러 실행해 보세요.

리스트 박스에서도 골라보고 콤보 박스에서도 골라보세요. 그림이 제 로 나오는지, 그림 밑에 레이블 문자가 제 로 표

시되는지 확인해 보세요.

그래도 잘 모르겠다구요? 괜찮습니다. 이런 식으로 계속하다가 보면 충 프로그래밍이란 이런 거구나 감이 잡힙니다. 일단 따라

서 입력하고, 실행해 보고, 다시 입력한 코드를 반복해서 살펴보고..... 이러다보면 자연스레 알게될 것입니다.

combo code 입력란에 label1.Caption=Combo1.list(2)

Select Case Combo1.list(Combo1.listIndex) 를

16

Page 17: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

label1.Caption=Combo1.list(Combo1.listIndex)

Select Case Combo1.listIndex 로 바꿔줘야 합니다.

8. 변수, 연산자, 조건문의 개념(1)-변수

변수의 개념

변수는 한자로 변할 變자를 써서 '變數'라고 씁니다. 영어로는 'a variable', 역시 변한다는 뜻이죠. 변수의 반 말은 상수(常數, a

constant 또는 an invariable)입니다. 변하지 않는 항상 같은 수라는 뜻입니다.

예를 들어,

a = 1 이라고 했을 때 왼쪽의 a는 변수, 오른쪽의 1은 상수가 됩니다. 즉 a라는 곳에 1을 입한다는 뜻으로 나중에 1이 아닌

다른 값도 입할 수도 있게 됩니다.

a = 1

b = 1

c = a + b

무슨 뜻인지 아시겠죠? (죄송합니다. 너무 쉬운 예를 들어서리.....)

VB에서 변수의 종류는 10가지가 넘습니다. 정수를 담을 수 있는 변수, 실수를 담을 수 있는 변수, 문자열을 담을 수 있는 변수

등등...

복잡하겠지만 아래의 표를 보세요. 변수의 종류가 어떤 것들이 있는지...

그 외에 Byte 형, Currency 형, Object 형, 사용자 정의 형식 등이 있다.(위의 표 안의 변수들이 자주 쓰인다.)

변수의 선언

VB에서는 굳이 변수를 선언하지 않아도 맨 처음 입하는 상수에 따라 자동으로 그 형식을 정의해줍니다.

예를 들어,

a = 3

b = "Itemembers.net"

17

Page 18: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

이라고 하면, a라는 변수는 정수형 변수(Integer)가 되고 b라는 변수는 문자열 변수(String)가 됩니다. 그러다가 이후에 a = "우리

나라" 라고 쓰면 엉뚱한 결과가 나타납니다.. 왜냐하면 a는 숫자만 들어갈 수 있는 변수이니까요...( b = 3 이라고 써도 오류가 발

생하지 않습니다. 이때 3을 숫자 3이 아닌 문자 3으로 인식해버리니까요..... )

그러나 보다 체계적인 프로그래밍을 하기 위해서는 변수를 선언해주는 것이 좋습니다. 미리 선언을 하지 않고 위와 같이 처음 들

어가는 값에 따라 변수의 형태가 결정될 경우 프로그래머의 실수로 인해 오류가 발생할 가능성이 큽니다. 가능하면 다음과 같이

명시적으로 변수를 선언해 줘야죠.

Dim iTemp as Integer

변수를 선언할 때는 Dim으로 시작합니다. Dim은 dimension의 약어입니다. 위의 문장은 iTemp라는 변수를 정수형(Integer)으로

선언한다는 뜻입니다.

따라서

iTemp = "안녕하세요" 라고 하면 오류가 납니다.

참고로 프로그램을 처음 시작할 때 Option Explicit라는 문장을 쓰고 시작하면 모든 변수는 반드시 사전에 선언을 해주어야 한다

는 뜻입니다. 프로그래머가 혹시나 실수로 변수를 선언하지 않고 사용할 경우 일부러 에러가 나도록 하는 문장입니다.

기타 자세한 내용은 이후에 실습을 통해 다시 설명을 드리도록 하겠습니다.

이론은 최 한 짧게하고 실습 예제를 통해 하나하나 알아나가도록 하죠. 그게 오히려 더 빨리 이해됩니다.

9. 변수, 조건문, 루프문의 개념(2)-연산자

이번 시간은 연산자에 해서 간략하게 알아봅니다. (쉬우니까 금방 넘어가죠.)

우선 아래 표를 보세요. 산술 연산자, 논리 연산자, 비교 연산자, 연결 연산자에 해 간략하게 표로 정리해봤습니다. 그냥 보면

이해되는 것도 있고 그렇지 않은 것도 있을 것입니다. 언뜻 봐서는 잘 이해가 안 갈 것 같은 몇 개만 예를 들어 보죠.

1. 산술 연산자

o + 연산자

+ 연산자는 설명할 것도 없을 것 같은데, 아닙니다. + 연산자는 숫자일 경우 말 그 로 + 연산을 수행하고, 문

자열 간에는 서로 '연결'하는 기능을 합니다. 아래 예문을 보면서 비교해 보세요.

18

Page 19: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

19

Dim MyNumber, Var1, Var2 '변수에 특별한 형을 지정하지 않고 그냥 변수 이름만 선언했습니다.'

MyNumber = 3 + 2 ' 5 를 반환합니다.

MyNumber = 123.4 + 123 ' 246.4 를 반환합니다

Var1 = 12 ' Var1 변수에 숫자 12 를 입합니다.

Var2 = 34 ' Var2 변수에 숫자 34 를 입합니다.

MyNumber = Var1 + Var2 ' 숫자 46 을 반환합니다.

Var1 = "12" ' Var1 변수에 문자열 "12"를 입합니다.

Var2 = "34" ' 문자열 "34"를 입합니다.

MyNumber = Var1 + Var2 ' 문자열 "1234"를 반환합니다.

이해가 안되면 이해될 때까지 보세요. 어렵지 않습니다. 그리고 작은 따옴표(')로 시작되는 부분은 주석입니다.

실제 프로그래밍할 때도 프로그래머가 알아보기 쉽게 주석을 달 때 작은 따옴표를 붙이고 설명문을 달아주면

됩니다. 실제 프로그램에서는 이 부분을 무시하고 실행합니다.

o ₩ 연산자

나눈 '몫'을 반환합니다. 반환한다는 뜻은 아래의 첫번째 예를 보자면 11 을 3 으로 나눈 몫(2)을 반환하여

MyValue 라는 변수에 입한다는 뜻입니다.

Dim MyValue As Integer

MyValue = 11 ₩ 3 ' 3 를 반환합니다. 한글 상태에서는 \ 신 ₩가 표시됩니다.

MyValue = 9 ₩ 3 ' 3 을 반환합니다.

MyValue = 100 ₩ 3 ' 33 을 반환합니다.

o Mod

나눈 후 '나머지 값'을 반환합니다.

Dim MyResult

MyResult = 10 Mod 5 ' 0 을 반환합니다.

MyResult = 10 Mod 3 ' 1 을 반환합니다.

MyResult = 12 Mod 4.3 ' 0 을 반환합니다.

MyResult = 12.6 Mod 5 ' 3 을 반환합니다.

Page 20: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

2. 논리 연산자

만약 프로그래밍을 처음 한다면 위의 도표를 잘 이해하기 힘들 것입니다.

o And 와 Or

If a > b And c > d then

.....

EndIf

위의 문장을 보면 a 가 b 보다 크고 "그리고" c 도 d 보다 크면 어찌어찌하라는 뜻입니다. 즉 좌우 두개의 비교

식이 모두 맞으면 True 값을 반환합니다. 만약 And 자리에 Or 를 넣는다면 "둘 중 하나만 참"이면 True 값을

반환합니다.

o Not

If Not(a>b) then

....

EndIF

위의 문장은 a 가 b 보다 크지 않으면 True 값을 반환합니다. 아시겠죠?

o Xor 등

Xor 는 좌우의 비교식 중 하나만 참일 때 True 값을 반환합니다. 두 식 모두 참이거나 모두 거짓일 경우에는

False 값을 반환하죠. 헤깔리죠? 몇 번 보시면 압니다. 그리고 Xor 는 초급 단계에서 당분간 쓸 기회가 없을 것

입니다.

Eqv 는 좌우의 식이 같으면 True 값을 반환합니다. Imp 는 어지간해서는 쓰이지 않으니 그냥 넘어가죠.

20

Page 21: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 비교 연산자

별다른 설명이 필요없을 것 같네요.

Like 와 Is 연산자도 나중에 중급 강좌로 넘어갈 때 다루기로 하죠.

4. 연결 연산자

o + 연산자는 산술 연산자의 사용법과 동일합니다.

o & 연산자는 강제로 문자열을 연결합니다.

예를 들어

Dim MyStr

MyStr = "30" + 40 ' 70 을 반환합니다.

MyStr = "30" & 40 ' "3040 을 반환합니다.

10. 변수, 조건문, 루프문의 개념(3)-조건문,루프문

조건문과 루프문은 프로그래밍을 할 때 없어서는 안될 요소입니다. 사실 프로그램이라는 것이 어떤 조건에서 변하는 상황에 따라

다른 결과를 내게하는 것 아니겠습니까? 만약 입력된 숫자가 어떠어떠할 경우에는 어떻게 하라는 식의 명령이 가능할려면 반드

시 조건문과 루프문을 사용할 수밖에 없습니다.

자주 쓰이는 조건문과 루프문으로는 다음과 같은 것들이 있습니다.

1. If ∼ End If 문

다음 예문을 보죠.

If a > 3 Then

b = b + 1

Else

21

Page 22: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

22

b = b - 1

End If

만약 a 가 3 보다 크면 b = b +1

아니면 b = b - 1 이라는 말이죠. 위에서 보는 단순한 IF 문 외에 If ∼ Else If 또는 If 문을 중첩해서 사용하는 경우도

있습니다.

If 문은 이럴 때 사용하는구나 하는 정도만 알고 넘어가죠.

2. Select Case ∼ End Case 문

Select Case iTemp

Case 1

MsgBox("iTemp 의 값이 1 입니다")

Case 2

MsgBox("iTemp 의 값이 2 입니다")

Case 3 To 5

MsgBox("iTemp 의 값이 3 에서 5 입니다")

Case Else

MsgBox("iTemp 의 값이 범위 밖입니다")

End Case

위의 예문은 iTemp 으 값이 1 일 경우, 2 일 경우, 3∼5 일 경우, 그 외의 숫자일 경우에 각각 메시지 박스에 해당 문장을

출력하라는 코드입니다. 어떤 뜻인지 이해는 가시죠?

정확한 쓰임새는 이후에 예제를 통해 알아볼 기회가 있을 것입니다.

3. For ∼ Next 문

Sum = 0

For iTemp = 1 To 10 Step 1

Sum = Sum + iTemp

Next

iTemp 의 값이 1 부터 10 까지 1 씩 증가할 동안 누적해서 값을 더하라는 말이죠. 즉 0 + 1 + 2 + … + 10 까지 하라는 말

입니다.

이해가 될듯 말듯? 계속 뚫어져라 보세요. 이해가 되었으면 아래 Do While 문으로 이동하세요.

4. Do While ∼ Loop 문

Do 문은 여러 가지 형태로 쓰입니다.

Do While ∼ Loop 와 같이 쓰일 때가 있고, Do Until ∼ Loop 과 같이 쓰일 때도 있습니다. 또한 약간 변형해서 Do ∼

Loop While 또는 Do ∼ Loop Unitl 과 같이 쓰이기도 합니다. 약간의 차이가 있지만 아래 예를 통해 기본적인 유형을 알

아보기로 하죠.

Page 23: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

23

Sum = 0

iTemp = 0

Do While iTemp < 10

iTemp = iTemp + 1

Sum = Sum + iTemp

Loop

조금 전 위의 For ∼ Next 문과 많이 닮았죠? 자세히 보세요. 무슨 뜻이냐 하면... iTemp 값이 10 보다 작은 동안에 Do

와 Loop 사이의 문장을 실행하라는 뜻입니다.

따라서 iTemp 의 값이 처음에 0 이었다가 1 로 바뀌고(iTemp = 0 +1), Sum 의 값도 1 로 바뀝니다(Sum = 0 + iTemp), 다

음에 Loop 문을 만나 다시 처음으로 돌아가면 iTemp 의 값이 2 로 바뀌고(iTemp = 1 + 1), Sum 은 3 으로 바뀝니다(Sum

= 1 + 2).

갑자기 헤깔리시나요? 자세히 뚫어져라 보시면 이해가 될 겁니다. 찬찬히 한번 보세요.

이상으로 간략하게 조건문과 루프문에 해서도 알아봤습니다. 다음 시간부터는 실제 예제를 통해 변수와 연산자, 조건문, 루프

문이 어떻게 사용되는지 살펴보기로 하죠. 한꺼번에 모든 조건문과 루프문, 연산자의 활용에 해 다루기는 힘듭니다. 하나하나

작지만 유용한 실습 예제를 통해 차차 익혀나가는 방식으로 진행하겠습니다.

11. 예제로 익히는 VB 기초(3)-메뉴만들기

지금부터 하나하나 예제를 만들어야 하는데요, 한번 만든 예제를 그냥 버리자니 뭔가 아까운 생각이 들지 않습니까? 그래서 지

금부터 만드는 예제를 모두 모아 하나의 예제 모음 프로그램을 만들어 보는 게 어떨까요?

아래 그림과 같이 5 강에서 만든 간단한 시계 프로그램과 6∼7 강에서 만든 간단한 그래픽 뷰어 프로그램을 'VB 입문'이라는 메뉴

에 추가하는 것입니다. 이렇게 해서 과거에 만든 예제 프로그램을 보면서 VB 의 기능을 숙지하자는 것이지요.

Page 24: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

앞으로 만들 실습 예제 프로그램도 마찬가지입니다. 이런 식으로 예제를 하나하나 완성해가다보면 VB 의 기초가 튼튼해지지 않

을까요?

오늘 실습할 내용은 이전에 비해 설명할 것들이 많습니다. 전체적으로 한 번 실습해 본 다음 차근차근 다시 읽어나가는 것이 좋

을 것입니다.

실습 준비

• 제 5 강에서 실습한 시계 프로그램의 소스 파일을 준비한다.

• 제 6∼7 강에서 실습한 그래픽 뷰어 프로그램의 소스 파일을 준비한다.

• 위 두개의 프로그램 모두 압축을 해제한 후 새로운 폴더에 복사해 둔다.

자, 설레는 마음으로 하나하나 따라해봅시다.

1. 먼저 VB 를 실행시켜 '표준 EXE' 프로젝트를 시작합니다.

24

Page 25: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

2. [프로젝트] 메뉴의 [MDI 폼 추가(I)]를 클릭합니다.

참고로 MDI 폼은 Multi Document Interface 의 약어입니다. 즉 여러 개의 문서(창)를 열어놓고 작업할 수 있는 환경이라

는 말이죠. 이 MDI 폼에 메뉴를 만들고 하위 메뉴를 만들어 실행하면, 이 MDI 폼 안에서 여러 개의 폼을 실행하여 마치

우리가 워드프로세서를 쓰면서 여러 개의 창을 열어놓고 쓰는 것과 같은 효과를 볼 수 있습니다. 이 때 MDI 폼을 부모

창이라고 하면 그 안에서 실행되는 폼을 자식(MDIChild) 창이라고 합니다.

o [MDI 폼]이 선택된 상태에서 [열기(O)] 단추를 클릭합니다.

o MDI 폼이 열렸으면 MDI 폼의 속성을 아래와 같이 바꿔 줍니다.

(이름) 속성을 frmMenu 로 바꿉니다.

Caption 속성을 실습예제모음으로 바꿉니다.

25

Page 26: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. VB 를 실행하면서 처음 열려있던 Form1 폼을 제거합니다.

o 프로젝트 창에서 Form1(Form1)을 마우스 오른쪽 단추로 클릭한 다음

o 팝업 메뉴에서 [Form1 제거(R)] 항목을 클릭합니다.

o 앞으로 이 프로그램에는 폼이 여러 개 필요한데 이러한 의미없는 이름의 폼은 오히려 혼란만 가중시킵니다. 따

라서 앞으로 어떤 폼을 만들더라도 반드시 폼의 이름 속성은 프로그램의 성격상 적당한 이름으로 반드시 바꿔

놓고 시작하는 것이 좋습니다.

4. [프로젝트] 메뉴에서 [폼 추가(F)]를 클릭합니다.

o 위 그림과 같이 [기존 파일] 탭을 클릭하고 위 실습 준비에서 준비해 둔 시계 프로그램의 폼 파일

(frmTimer.frm)을 선택하고 [열기(O)]를 클릭합니다.

o 같은 방법으로 제 6∼7 강에서 만들었던 그래픽 뷰어 프로그램의 폼도 추가합니다.

그런데 그래픽 뷰어 프로그램의 폼 이름이 Form1 으로 되어 있죠?

이전에 6∼7 강에서 다룬 그래픽뷰어 프로그램을 만들 때 폼의 이름을 특별히 주지 않아 폼의 이름이 Form1 로

되어 있는 것입니다. 그러나 이미 말씀드렸다시피 여러 개의 폼으로 구성된 프로그램을 만들 경우 그 이름이 적

절하지 못해 혼란을 초래할 수가 있습니다. 그래픽 뷰어의 폼을 추가한 다음 폼의 이름 속성을 Form1 에서

frmViewer1 으로 바꿔 주세요.

26

Page 27: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

5. 이제 아래와 같이 프로젝트 창에 3 개의 폼이 표시되죠?

만약 아래와 같은 모양이 나지 않는다면 다시 처음부터 차근차근 따라해보세요.

프로젝트 창에 폼의 이름은 추가되었는데 실제로 폼이 보이지 않는다구요? 그렇다면 프로젝트 창의 폼 이름을 더블클릭

해보세요. 그러면 해당 폼이 나타날 것입니다.

6. 이번에는 메뉴를 만듭니다.

o [도구] 메뉴에서 [메뉴 편집기]를 선택합니다.(단축키 Ctrl+E 를 눌러도 됩니다.)

o 위의 그림과 같이 Caption 란에 "파일(&F)"라고 입력하고, Name 란에 "mnuFile"이라고 입력합니다.

o 그리고 [다음(N)] 단추를 클릭합니다.

o 다시 Caption 란에 "종료(&X)"를 입력하고, Name 란에 "mnuExit"를 입력합니다.

o 메뉴 편집기의 중간쯤에 위치한 오른쪽 화살표 단추( )를 클릭합니다. 그러면 "종료(&X)"메뉴 앞에 "...." 표시가

나타나죠? 이것이 바로 하위 메뉴라는 것입니다.

o 오른쪽 화살표 단추는 하위 메뉴, 왼쪽 화살표 단추는 상위 메뉴로 바꾸는 역할을 합니다. 위쪽 화살표는 선택

한 메뉴를 위로 이동시키고, 아래쪽 화살표는 선택한 메뉴를 아래로 이동시킵니다.

o 결과적으로 다음과 같이 메뉴를 추가한 다음, 왼쪽 오른쪽 위 아래 화살표 단추를 적절히 이용하여 위의 그림과

같은 상태로 만들면 됩니다.

여러 번 시도해보면 반드시 위와 같은 모양이 나올 것입니다.

27

Page 28: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

설명 안드려도 알겠지만 위에서 ShortCut(S)란은 단축 키를 정의하는 곳입니다. 즉 Ctrl+X 를 누르면 프로그램

이 자동으로 종료된다는 뜻이죠.

7. 아래와 같은 모습이 나왔나요?

o 파일 메뉴를 누르면 아래에 하위 메뉴가 보여야 됩니다.

o 마찬가지로 VB 입문 메뉴를 누르면 아래에 하위 메뉴가 보여야죠.

28

Page 29: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

8. 파일 메뉴의 하위 메뉴인 [종료]를 클릭합니다.

o 그러면 코드 보기 창이 나오고 Private Sub mnuExit_Click()이라는 이벤트 함수가 보이죠?

o 그 아래에 위 그림과 같이

End 를 입력합니다.

9. 같은 방법으로 [VB 입문] 메뉴의 하위 메뉴인 [시계], [그래픽뷰어]도 클릭하여 아래와 같은 코드를 모두 완성합니다.

Private Sub mnuExit_Click()

End

End Sub

Private Sub mnuTimer_Click()

frmTimer.Show

End Sub

Private Sub mnuViewer1_Click()

frmViewer1.Show

End Sub

29

Page 30: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

10. 이번에는 frmTimer 폼의 [끝내기(X)] 단추를 더블클릭하여 코드 보기 창을 엽니다.

o 위 그림과 같이 커맨드 버튼 클릭 이벤트 함수에 예전에 입력했던 "End" 문을 지우고 "Unloade Me"를 입력합

니다.

o 만약 여기의 End 문을 그 로 두면 나중에 프로그램을 실행한 다음 시계 프로그램의 [끝내기] 단추를 누르면

프로그램 전체가 종료되는 결과가 나타납니다. 다시 말해 End 문은 프로그램 전체를 끝내게 되므로 현재 열려

진 자신의 폼을 닫는 명령인 "Unload Me"로 바꾼 것입니다.

이미 위에서 우리가 새로 만든 MID 폼의 [파일] 메뉴에서 [종료]를 누르면 프로그램을 종료하도록 End 문을

썼습니다.

11. 시계 프로그램의 frmTimer 폼을 선택한 다음 폼 속성창에서 아래 그림과 같이 속성을 변경합니다.

o Border Style 속성을 '1 - 단일 고정'으로 바꿉니다.

o MDIChild 속성을 'True'로 설정합니다.

12. 동일한 방식으로 그래픽 뷰어 프로그램의 frmViewer1 폼의 속성도 위와 같이 바꿔 줍니다.

Border Style 속성과 MDIChild 속성을 왜 바꿨는지 궁금하시죠? 이 실습을 모두 마친 다음에 Border Styele 속성을 '2 -

크기 조정 가능'으로 하고, MDIChild 속성을 'False'로 한 다음 비교 실행해 보세요. 어떤 점에서 다른지.... 직접 한 번

해보시길... 그 차이가 쉽게 드러납니다.

13. 이제 모든 것이 끝났습니다. [F5] 키나 메뉴에서 실행 단추를 클릭하여 직접 실행해 보세요. 메뉴를 누를 때 마다 하나

하나 변하는 모습, 감격스럽지(?) 않습니까?

14. 이제 저장을 합시다. 폼 파일 이름은 폼 속성의 이름 그 로 사용하면 될 것 같고, 프로젝트 이름은 "메뉴"로 하면 되겠

군요.

30

Page 31: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

15. 폼 파일과 프로젝트 파일을 저장했으면 이제 실행 파일도 만들어 보세요. 어떻게 만드는지 아시죠? VB 의 [파일] 메뉴에

[메뉴.exe 만들기]라는 메뉴가 있으면 정상입니다. 그걸 누르면 되죠....

12. 예제로 익히는 VB 기초(4)-구구단

오늘은 For ∼ Next 문을 사용하여 구구단을 출력하는 프로그램을 만들어 볼 예정입니다.

위 화면을 보면 벌써 감이 오겠지만, 지난 강좌에서 다룬 메뉴 프로그램에 구구단을 출력하는 폼을 하나 추가하고, 메뉴에도 구

구단 메뉴를 하나를 추가하면 됩니다.

따라서, 오늘 강좌를 위해서는 지난 시간에 만들어 둔 소스 파일이 필요합니다.(만약 없으신 분은 바로 앞 강좌에서 소스를 다운

로드하여 압축을 해제한 다음 따라하시면 됩니다.)

시작합니다.

1. 지난 시간에 만든 프로젝프 파일을 엽니다.

어떻게 여냐구요? 지난 시간에 만든 "메뉴.vbp" 파일을 더블클릭하면 됩니다.

2. [프로젝트] 메뉴의 [폼 추가]를 클릭하여 새로운 폼을 엽니다.

[폼 추가] 화 상자에서 기본적으로 선택되어 있는 그냥 '폼'을 열면 됩니다.

31

Page 32: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 새로 추가한 폼의 속성을 다음과 같이 수정합니다.

o (이름) : frmGugu

지난 시간에 말씀드렸죠? 일단 폼을 만들면 폼의 성격에 맞는 이름을 부여하라고... 그냥 Form1 과 같이 무의미

한 상태로 놓아두면 나중에 굉장히 헤깔리게 됩니다.

o BorderStyle : 1 - 단일고정

테두리의 크기를 고정합니다.

o Caption : 구구단

제목 표시줄에 표시될 창 제목입니다. Titlebar 의 타이틀.

o MDIChild : True

새로 추가된 폼이 지난 시간에 만든 전체 메뉴를 실행하는 화면(MDI 창) 안에서 실행되도록 하는 것입니다. 이

것을 기본 값인 False 상태로 놓아두면.... (궁금하시면 직접 한번 해보세요!)

4. 오른쪽 프로젝트 창이 다음과 같은 모습이면 정상입니다.

5. 이제 본격적으로 구구단 프로그램을 만들어 보도록 하죠.

32

Page 33: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 먼저 새로 만든 폼에 다음과 같이 컨트롤을 배열합니다.

o 각 컨트롤의 속성을 다음과 같이 변경합니다.

6. 커맨드 버튼을 더블클릭하여 cmdGuguResult 의 Click 이벤트 함수가 보이도록 코드 창을 엽니다.

말은 복작하게 했지만, 그냥 "구구단 출력"이라는 버튼을 더블클릭하란 말입니다.

7. 지금부터 코드를 입력합니다.

o 다음과 같이 변수를 먼저 선언합니다.

여기서 작은 따옴표(')로 시작하는 것은 설명문이라고 했습니다. 굳이 입력하지 않는다고 프로그램에 오류가 생

기는 건 아니지만 항상 주석을 다는 습관도 중요합니다.

33

Page 34: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

34

Dim intGuGu As Integer '텍스트박스에서 입력받은 문자를 숫자로

Dim intTemp As Integer 'For Next 문에서 반복할 변수

Dim strResult As String '구구단 결과 문자를 저장할 변수

o 다음 줄부터는 텍스트 박스를 통해 입력한 숫자에 해당되는 구구단을 출력하는 코드입니다. 아래와 같이 정확하

게 입력하시기 바랍니다.단, 원으로 된 숫자는 입력하면 안됩니다...설명하기 위해 달아놓은 것이니까요.

① lblGuguResult.Caption = "" '레이블을 문자열을 초기화합니다.

② intGuGu = Val(txtGuguInput.Text)

③ For intTemp = 1 To 9

'Chr$(10) -> 줄을 끝까지 채우는 역할

'Chr$(13) -> Return 줄을 바꾸는 역할

④ strResult = Val(intGuGu) & " * " & Val(intTemp) & " = " & Val(intGuGu * intTemp) & Chr$(13)

'기존 레이블 caption 에 새로운 문자열을 추가함

⑤ lblGuguResult.Caption = lblGuguResult.Caption + strResult

⑥ Next

o 풀어서 설명드리죠...

만약 정말로 정말로 프로그래밍에 해 생짜 초보인 사람은 위의 코드를 이해하기 매우 어려울 수 있

습니다. 그러나 몇 가지 힌트만 제공할테니 한번 자신의 논리력을 테스트한다고 생각하고 이해가될 때

까지 보고 또 보세요...

①의 코드는 레이블의 값을 초기화합니다. 이 프로그램은 입력한 숫자에 해당하는 구구단을 출력하는

프로그램입니다. 따라서 처음에 3 단을 입력했다가, 다시 5 단을 입력했을 때 처음 3 단에 해당하는 구

구단을 출력한 그 결과를 싹 지우고 5 단을 출력해야 됩니다. 이 문장은 기존의 결과를 싸~악 지우는

역할을 합니다.

②는 텍스트 박스에서 입력한 숫자를 받아들이는 기능입니다. 여기서 Val() 함수는 문자열을 숫자로 바

꾸는 기능을 합니다. 텍스트 박스로 입력된 것은 그것이 숫자든 문자든 모두 문자열로 인식하므로, 예

를 들어 문자 "3"을 입력했다면 그 값을 숫자 3 으로 바꾸어 주는 것입니다.

③에서 ⑥까지는 For ∼ Next 반복문입니다. 그 뜻을 살펴보자면,

③ intTemp 라는 변수를 1 에서 9 까지 하나씩 증가시키면서 반복하라는 것입니다.

이번 프로그램 코드의 핵심은 바로 ④,⑤번이죠. strResult 변수는 실제 출력하는 문자열을 저장하고 있

는 변수인데, 등호(=) 뒤의 여러 값들을 연결(&)하여서 하나의 변수(strResult)에 저장한 것입니다. 이

strResult 변수의 내용을 또 누적해서 최종적으로 9 번까지 누적해서 저장해 놓은 것이 바로 ⑤번에 있

는 lblGuguResult.Caption 입니다. 선뜻 이해하기 힘들죠? 그러나 본인이 스스로 이 코드를 몇번이고

뚫어져라 보면서 이해하는 수밖에 없습니다. 말로 풀면 풀수록 더 헤깔릴 수 있으니까요. 프로그래밍은

프로그래머 자신의 머리로 사고한 내용을 풀어내어야 합니다. 아무리 숙달된 프로그래머도 남이 만들어

Page 35: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

놓은 코드를 쉽게 이해하기는 힘듭니다. 언제나 자신의 방식이 있으니까요. (물론 지금 우리가 하고 있

는 것을은 기본 중의 기본이라 프로그래밍을 하는 사람은 누구나 알고 있는 기초적인 것입니다. 그러나

어떠한 프로그래머도 이와 같은 초보 시절이 있었으니... 기죽지 말고 끝까지 찬찬히 코드를 읽어보시

기 바랍니다. 이해될 때까지...)

8. 이로써 구구단을 출력하는 프로그램이 완성되었습니다. 이제 메뉴에 구구단 폼(창)을 불러오는 메뉴를 추가해야겠죠?

o MDI 폼(frmMenu)을 선택한 다음 [도구] 메뉴에서 [메뉴 편집기(Ctrl+E)]를 실행합니다.

[메뉴 편집기]가 흐리게 보인다구요? 그건 frmMenu 폼(MDI 폼)이 열려있지 않기 때문입니다. 오른쪽 프로젝트

창에서 frmMenu 를 더블클릭하여 폼을 열고 난 다음에 다시 해보세요.

o 위의 그림과 같이 가장 아래에 '구구단' 메뉴를 추가합니다.

9. frmMenu 폼의 [VB 입문(A)]의 하위 메뉴에 '구구단'이 추가되었으면, '구구단' 메뉴를 클릭합니다.(그러면 아래와 같은

코드 창이 열립니다.)

o mnuGugu1_Click() 함수에 위 그림과 같이

frmGugu.Show 코드를 입력합니다. 즉 '구구단' 메뉴를 클릭하면 frmGugu 라는 폼(창)을 열라는 뜻입니다.

10. 이제 다 됐습니다. [F5] 키를 눌러 프로그램을 실행해 보세요. 그리고 [VB 입문(A)] 메뉴의 하위 메뉴인 [구구단]을 클

릭해 보세요. 그리고 텍스트 박스에 원하는 숫자를 입력하고 '구구단 출력' 단추를 눌러 보세요. 제 로 출력이 됩니까?

35

Page 36: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

흐흑~ 안된다구요? 그럼 어딘가 잘못 따라하신 것이 있을 겁니다. 처음부터 다시 찬찬히 해보세요. 다시 천천히...

11. 정상적으로 되었으면 저장을 하세요. 새로 만든 폼의 이름은 '구구단'으로 하는 것이 좋겠네요.

실제로 프로그래밍을 할 때는 작업 중간에 틈틈이 저장하는 습관을 들이세요. 나중에 후회하지 않습니다.

13. 예제로 익히는 VB 기초(5)-구구단2

오늘은 지난 번에 실습했던 내용을 복습하는 의미로 지난 실습과 유사한 프로그램을 만들어 봅니다. 왜냐하면 구구단 출력을 위

한 기본 로직은 프로그래밍의 기본 중의 기본이니 이 정도는 안 보고도 만들 수 있어야 되니까요. 단 지난 실습에서는 Text Box

를 통해 출력할 단수를 입력받았는데, 이번 실습에서는 Input Box 를 이용해 원하는 단수를 입력받도록 하는 것만 다릅니다.

그러니까 아래 그림과 같이 [구구단출력] 단추를 눌러 [입력 요구 창]이 나타나서 원하는 숫자를 입력하고 [확인] 단추를 누르

면 구구단이 출력되는 프로그램입니다.

36

Page 37: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

단번에 아하~라고 생각하셨다면 (그리고 프로그래밍이 처음이라면) 당신은 분명히 프로그래밍에 소질이 있습니다.

자, 실습해 봅시다.

1. 먼저 VB 를 실행하여 지난 시간에 만들었던 '메뉴.vbp' 프로젝트를 엽니다.

2. [프로젝트] 메뉴에서 [폼 추가]를 선택합니다. [폼 추가] 화 상자에서 [열기]를 눌러 일반적인 모양의 폼을 추가합니

다.

3. 새로 추가된 폼을 아래 그림과 같이 만듭니다.

37

Page 38: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

4. 커맨드 버튼을 눌렀을 때 Input Box 가 나타나도록 다음과 같이 코드를 작성합니다.

o 빨간 네모 안의 세번째 줄까지는 변수를 선언하였습니다.

o 빨간 네모 안의 네번째 줄은 첫번째 그림과 잘 비교해가면서 그 쓰임새를 살펴보면 이해가 될 것입니다.

InputBox(①, ②, ③)과 같은 형식으로 쓰이며, ①에는 출력 메시지, ②에는 제목 표시줄에 표시될 타이

틀, ③에는 입력 기본 값을 쓰면 됩니다.

InputBox(…,…,…)의 결과를 InputResult 변수에 저장하라는 뜻인 줄은 알겠죠? InputBox(…,…,…)의

결과가 무엇일까요? 바로 사용자가 직접 입력한 값을 말합니다. 만약 사용자가 아무 것도 입력하지 않

으면? 기본 값인 3 을 InputResult 변수에 입을 하겠죠.

5. 그 다음 줄부터는 일부러 흐리게 표시했습니다.

직접 코드를 작성해 보세요. 지난 강좌의 내용과 동일합니다. 가급적이면 지난 번 강좌를 참조하지 말고....최 한 스스

로 생각해서 한번 작성해 보세요. 그래야 실력이 늡니다.

lblGuguResult.Caption = "" '레이블의 문자열을 지웁니다.(초기화)

For intTemp = 1 To 9

intGuguResult = InputResult * intTemp

strGugu = CStr(InputResult) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)

lblGuguResult.Caption = lblGuguResult.Caption + strGugu

Next

6. 이제 실행을 해 봐야 되는데, 일단 한번 [F5]를 눌러 실행해 보세요. 당연히 지난 시간에 만들었던 메뉴가 나타나죠?

그리고 오늘 만든 프로그램을 실행할 수 있는 메뉴가 없죠? 그럼 만들어야죠.

38

Page 39: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 오른쪽 프로젝트 창에서 frmMenu 폼을 더블클릭하여 활성화시킵니다.

o [도구] 메뉴에서 [메뉴 편집기]를 실행합니다.

o 아래와 같이 메뉴를 추가하고 [확인] 단추를 누릅니다.

7. frmMenu 폼의 [VB 입문(A)] 메뉴의 하위 메뉴에 [구구단 2]라는 하위 메뉴가 보일 것입니다. [구구단 2]를 클릭하여 아

래와 같이 mnuGugu2 의 Click 이벤트 함수에 적당한 코드를 작성합니다.

제가 비록 희미하게 표시를 했지만 아래 위 코드를 보고도 정확하게 작성하지 못했다면......(본인의 머리를 쬐끔 의심해

볼 필요가 있다고 생각합니다.^^)

8. 이제 다 끝났습니다. 실행해 보시고 잘못된 부분이 있으면 다시 차근차근 살펴보면서 오류를 수정하시면 됩니다.

14. 예제로 익히는 VB 기초(6)-함수

오늘은 지난 강좌에서 만들었던 프로그램을 '함수' 개념을 도입해서 재구성해보는 실습을 합니다.

39

Page 40: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

40

함수? y=2x*3x??? 갑자기 왠 함수냐구요?

프로그래밍에서 함수라고 하는 것은 매우 광범위하게 사용되고 있습니다. 우리는 이미 몇 가지 함수를 사용했습니다.

예를 들어 그래픽 뷰어를 만들 때 LoadPicture 함수를 사용하여 그림 이미지를 불러왔었죠(기억이 안난다구요? ^^). 간단한 시계

프로그램을 만들 때도 Format 이라는 함수를 사용해서 날짜와 시간 형식을 지정했던 적이 있었습니다.

꼭 공부 못하는 사람이 배워놓고도 끝까지 안배웠었다고 발뺌하죠. 그럴까봐 그 때 사용했던 코드를 직접 보여드리겠습니다.

[시계 프로그램에서]

lblResult.Caption = Format(Now, "yyyy 년 mm 월 dd 일 AM/PM hh 시 mm 분 ss 초")

시계 프로그램에서는 전체 코드가 위의 단 한줄이었는데...

[그래픽뷰어 프로그램에서]

Image1.Picture = LoadPicture("c:₩vb 실습₩워드.gif")

기억나시죠?

위의 코드에서 제가 진하게 표시한 것이 바로 비주얼베이직에서 제공하는 내장 함수입니다. 내장이 무슨 뜻인지 아시죠? 사용자

가 편리하게 사용하도록 기본적으로 제공하고 있는 함수입니다. 우리는 그것을 마치 명령어처럼 사용하죠. 그냥 사용법만 알고

있으면 됩니다. 구체적으로 어떤 코드로 만들어졌는지는 알 필요가 없죠. 그냥 LoadPicture 를 사용해서 괄호 안에 이미지 파일

의 위치만 적어주면 VB 에서는 그 그림을 불러들입니다. Format 이라고 써놓구선 괄호 안에 표시할 내용(위의 예에서는 현재 시

간 Now)과 형식(위의 예에서는 yyyy mm dd 등으로 표시된 것)을 순서 로 적어주면 됩니다. 이렇게 VB 에서 기본적으로 제공

하고 있는 내장 함수는 매우 많습니다. 그것을 100% 다 활용하는 프로그래머는 아마도 없을 것입니다.

오늘 우리가 짚고 넘어가야할 내용은 내장 함수가 아니라 '사용자 정의 함수'. 쉬운 말로 내가 직접 함수를 만들어 보는 것입니다.

커~억~ 내가 감히 어떻게???

쉽습니다. 지금까지 그랬듯이 그리 걱정할 것은 없습니다. 매우 간단한 예를 들어 설명드리겠습니다. 지난 시간에 만든 구구단 2

프로그램 소스를 조금만 바꾸면 됩니다.(그럴려면 지난 시간의 실습 내용을 충분히 숙지하고 있어야겠죠....)

여기서 잠깐! 용어 정리부터 합시다. 위의 예에서 Format, LoadPicture 를 함수명 또는 함수이름이라고 합니다. 그리고 괄호 안의

내용을 매개 변수라고 합니다. 무언가를 이어주는(매개) 변수라는 뜻입니다. 다시 말해, 함수를 사용할 때는 매개 변수 없이 그냥

함수 이름만 부르면 실행되는 경우도 있고, 함수를 부를 때 어떤 값(매개 변수)를 넘겨 주고 그 값을 처리하여 되돌려 주도록 만

들 수도 있다는 것입니다. 위에서는 두개의 함수가 모두 매개 변수를 사용했는데 예를 들어 LoadPicture 함수를 부를 때 매개 변

수로 c:₩vb 실습₩워드.gif 값을 넘겨줬습니다. (이해 되시죠?)

오늘 우리가 실습할 내용은 지난 시간에 만들었던 구구단 프로그램을 함수를 이용해 다시 만들어 보는 것입니다.

먼저 이론부터 다 설명하고 따라하기 식으로 실습하기로 하겠습니다.

지난 시간에 실습했던 구구단을 출력하는 코드의 핵심은 다음과 같습니다.

For intTemp = 1 To 9

intGuguResult = InputResult * intTemp

strGugu = CStr(InputResult) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)

lblGuguResult.Caption = lblGuguResult.Caption + strGugu

Next

Page 41: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

위 코드를 별도의 함수로 만들자는 것이 오늘 실습의 핵심입니다.

예를 들어 구구단을 출력하기 위해 위의 코드를 매번 복사해서 쓰지 말고, 미리 함수로 만들어 뒀다가 구구단을 출력할 필요가

있을 때

GuguCal 3 이라고 하면 3 단이 출력되고

GuguCal intTemp 라고 하면 intTemp 라는 변수에 해당하는 구구단을 출력하도록 만들자는 뜻입니다.

또 여기서 잠깐! 위의 예에서 왜 함수 이름(GuguCal) 뒤에 매개 변수를 쓸 때 괄호를 사용하지 않았는가? 이건 좀 복잡한 얘깁

니다만, 함수가 리턴값이 있으면 매개 변수를 괄호 안에 써 넣고, 그렇지 않을 경우에는 그냥 괄호 없이 사용합니다. 이 부분은

오늘 말씀드릴 범위를 벗어나기 때문에 이 정도로만 하고, 다음에 함수에 해 조금 더 자세하게 다룰 때 예제를 통해 비교해보

기로 하죠. 이상.?

오늘 다룰 실습의 코드를 먼저 공개하겠습니다. 프로그램 겉모양은 지난번 실습 내용과 동일합니다.

위의 그림과 비교해 보면서 보세요.

먼저 [구구단 출력] 단추를 눌렀을 때의 실행할 문장입니다.

①Private Sub cmdGuguGet_Click()

②Dim InputResult As String

③InputResult = InputBox("몇 단을 출력할까요?", "입력 요구 창", "3")

41

Page 42: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

42

④GuguCal CInt(InputResult)

⑤End Sub

• ①,⑤는 자동으로 생성된 내용이죠? 그런데 자세히 살펴보면 이것도 결국은 함수라는 것을 알수 있습니다. 즉 [구구단

출력]이라는 버튼(cmdGuguGet)을 클릭했을 때 실행하는 함수라는 것입니다. 우리는 결국 지금까지 계속해서 사용자 정

의 함수를 만들어 온 것이나 마찬가지입니다.

• ②는 변수를 선언하는 부분이죠. 지난 시간에 다 했던 내용이니까 설명은 생략하고...(InputBox 에서 입력받은 값을 저장

하기 위한 문자열 변수 InputResult 를 선언한 것입니다.)

• ③에 해서도 지난 시간에 다 다뤘으니 설명을 생략합니다.

• ④ 부분을 왜 굵게 표시했느냐... 바로 이 부분이 오늘 다룰 핵심이기 때문입니다.

GuguCal CInt(InputResult)

여기서 GuguCal 은 함수명, Cint(InputResult)가 매개 변수입니다.

그런데 매개 변수가 좀 복잡하네요. Cint 는 변수형을 정수형으로 바꿔주는 역할을 하는 함수입니다. 따라서

CInt(InputResult)를 풀이하자면 InputBox 에서 입력받은 값인 InputResult 를 정수형으로 바꾼 값이라고 할 수 있죠.

그러니까 GuguCal 함수는 InputResult 값을 매개 변수로 사용한다는 뜻입니다. 그리고 GuguCal 함수는 우리가 직접 만들

어야 할 함수입니다. ← 이 부분 이해될 때까지 계속 반복...

그 다음 우리가 실습할 코드입니다.

①Private Sub GuguCal(value1 As Integer)

②Dim strGugu As String

②Dim intTemp As Integer

②Dim intGuguResult As Integer

③lblGuguResult.Caption = ""

④For intTemp = 1 To 9

④intGuguResult = value1 * intTemp

④strGugu = CStr(value1) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)

⑤lblGuguResult.Caption = lblGuguResult.Caption + strGugu

⑥Next

⑦End Sub

좀 복잡하게 보이지만 지난 시간에 거의 다룬 내용이기 때문에 오늘은 그 차이점만 설명하도록 하겠습니다.

위의 코드는 ④GuguCal CInt(InputResult)라고 GuguCal 함수를 호출했을 때 실행할 GuguCal 함수를 정의한 것입니다.

• ①Private Sub GuguCal(value1 As Integer)

여기서 Private 는 제한자라고 하는데 그냥 Publc, Private, Friend 등 세 종류가 있다는 것만 짚고 넘어가겠습니다. 이 함

수가 현재의 모듈(폼)에서만 사용할 수 있다는 뜻입니다.(Public 은 모든 폼에서 다 사용할 수 있습니다...)

함수는 Sub 로 시작합니다. Function 으로 시작하는 함수도 있는데 나중에 설명하겠습니다. GuguCal 은 함수 이름입니다.

괄호 안의 value1 As Integer 는 매개 변수입니다. valule1 이라는 매개 변수가 정수형 변수라는 뜻입니다. 이 부분은 매우

중요합니다. GuguCal 이라는 함수를 사용할 때 매개 변수는 반드시 정수형을 사용해야 한다는 뜻입니다.

그래서 아까 이 함수를 호출할 때 GuguCal CInt(InputResult)라고 했습니다. 원래 InputResult 변수가 문자열 변수이니까

Page 43: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

이것을 정수형으로 바꾼 다음에 그 값을 GuguCal 함수로 넘겨주라는 뜻이었죠. 이렇게 넘겨받은 매개변수는 그 아래

④번 코드에서 사용됩니다.

• ②와 ③은 지난 시간과 동일하니까 설명은 생략하고

• ④를 자세히 보세요. 그리고 지난 시간에 실습했던 코드와 비교해 보세요.

자세히 보면 알겠지만 하나의 변수를 제외하고 동일합니다. 지난 시간에 실습했던 코드에서 InputResult 라는 변수를

value1 으로 바꾼 것밖에는 없습니다.

지난 시간에는 InputBox 를 통해 입력받은 값(InputResult)을 바로 사용했지만 이번 시간에는 이 변수 신 value1 이라

는 새로운 변수를 사용한 것 밖에는 없죠. 이 value1 이라는 변수는 GuguCal 함수를 실행할 때 넘겨받은 값으로 실제로

는 InputResult 값과 같습니다. 즉 InputBox 를 통해 입력받은 값을 InputResult 라는 변수에 저장(③InputResult =

InputBox("몇 단을 출력할까요?", "입력 요구 창", "3"))했다가 이 값을 다시 GuguCal 이라는 함수를 부르면서 넘겨 준 것

(④GuguCal CInt(InputResult))입니다.

15. 예제로 익히는 VB 기초(7)-함수

지난 시간에 이론 설명했던 거 그냥 실습해 보는 것입니다.

사실 지난 시간에 설명한 내용만으로도 충분하지만 혹시나 싶어 따라하기 식으로 한번 짚고 넘어갑니다.

1. 먼저 VB 를 실행하여 [기존 파일]에서 '메뉴.vbp' 파일을 엽니다.

2. [프로젝트] 메뉴에서 [폼 추가]를 선택하여 빈 폼 하나를 생성합니다.

3. 아래와 같은 폼을 구성합니다.

레이블과 커맨드 버튼을 만들고 속성을 다음과 같이 지정합니다.

43

Page 44: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

4. 프로젝트 창에서 frmMenu 폼을 더블클릭하여 활성화한 다음 [도구] 메뉴에서 [메뉴 편집기(M)]를 실행합니다. 아래 그

림과 같이 '구구단 3(함수)' 메뉴를 추가합니다.

5. frmMenu 폼의 [VB 입문(A)] 메뉴의 하위 메뉴에 [구구단 2]라는 하위 메뉴가 보일 것입니다. [구구단 2]를 클릭하여 아

래와 같이 mnuGugu3 의 Click 이벤트 함수에 frmGugu3.Show 코드를 입력합니다.

44

Page 45: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

6. 다시 frmGugu3 폼을 선택하여 지난 강좌에서 설명한 코드를 입력합니다.

사실 오늘 강좌의 핵심은 바로 위의 코드인데 지난 시간에 다 설명했으니 더 설명할 것은 없습니다.

7. 그럼 한번 실행해 봅시다.

45

Page 46: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

46

16. 예제로 익히는 VB 기초(8)-Function함수

지난 시간에 이어 이번에도 함수를 다뤄봅니다.

지난 시간에 다뤘던 함수가 Sub 함수였다면 이번 시간에는 Function 함수에 해 다뤄봅니다. 그리고 Select Case 문을 사용하

여 조건 처리를 하는 방법을 실습해 보도록 합니다.

지난 시간에 잠깐 언급을 했었던가요? Sub 함수와 Function 함수의 차이는 리턴값이 없느냐 있느냐의 차이라고.

Sub 함수를 호출할 때는 다음과 같이 호출합니다.

• Call 함수명(매개변수)

Call 을 사용하면 반드시 괄호로 매개변수를 포함합니다.

또는

• 함수명 매개변수

그냥 함수명만 사용하면 매개변수는 괄호 없이 사용합니다.

반면 Function 함수를 호출할 때는 다음과 같이 호출합니다.

• 리턴값 = 함수명(매개변수)

리턴값을 사용하지 않고 그냥 함수명 매개변수와 같은 식으로 사용할 수도 있으나 Sub 함수와 Function 함수의 차이인

리턴값 여부를 설명하기 위해 생략하였습니다.

즉 Function 함수를 호출할 때는 Sub 함수와는 달리 함수의 실행 결과로 어떤 값을 돌려 받을 수 있다는 뜻이 됩니다. 이 차이

는 매우 큽니다. 어떤 기능을 수행하고 난 다음 반드시 결과값을 돌려받을 필요가 있을 때는 Function 함수를 써야한다는 뜻이

니까요. 반면 단순히 기능만 수행하고 마칠 경우에는 Sub 함수를 사용하는 것이 낫다는 뜻이 됩니다.

혹시 다음 코드가 기억나나요? 바로 지난 시간에 실습한 구구단을 계산하는 함수였습니다. 함수를 잘 살펴보면 함수 이름

(GuguCal) 앞에 Sub 라고 씌어있습니다. 이것이 바로 Sub 함수입니다.

Private Sub GuguCal(value1 As Integer)

Dim strGugu As String

Dim intTemp As Integer

Dim intGuguResult As Integer

lblGuguResult.Caption = ""

For intTemp = 1 To 9

intGuguResult = value1 * intTemp

strGugu = CStr(value1) & " * " & CStr(intTemp) & " = " & CStr(intGuguResult) & Chr$(10) & Chr$(13)

lblGuguResult.Caption = lblGuguResult.Caption + strGugu

Next

Page 47: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

End Sub

위의 함수에서 lblGuguResult.Caption = lblGuguResult.Caption + strGugu 라는 부분을 잘 살펴보면 lblGuguResult 레이블의 캡션

값을 직접 수정하고 있습니다. 그리고 끝납니다. 이 함수를 실행하고 난 뒤 어떤 값을 돌려 줄 필요가 없으니까요.

반면 오늘 실습할 내용은 그 결과값을 돌려주는 Function 함수입니다.

좀 복잡하게 보일지 모르지만 이것만 이해하면 Sub 함수와 Function 함수의 차이를 알 수 있습니다.

천천히 따라해 볼까요?

1. VB 를 실행하여 '메뉴.vbp' 프로젝트 파일을 엽니다.

2. [프로젝트] 메뉴의 [폼 추가]를 선택하여 빈 폼을 하나 만듭니다.

3. 아래와 같은 폼을 만듭니다.

47

Page 48: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 폼의 속성을 다음과 같이 변경합니다.

o 폼을 저장합니다. 파일 이름을 함수연습이라고 저장합시다.

4. [보기] 메뉴의 [코드]를 실행한 다음 다음과 같이 코드를 입력합니다.

o Cont plus = 1 는 plus 를 상수 1 과 선언한다는 뜻입니다. 즉 앞으로 이 프로그램에서 1 신 plus 라고 써도

된다는 뜻입니다. 마찬가지로 minus 라고 쓰면 이것은 2 를 나타낸다고 보면 됩니다.

o Public Function Calculator(value1 As Integer, value2 As Integer, method As Integer) As Integer

앞의 Public 은 크게 신경 안써도 됩니다. 실제로 쓰지 않아도 됩니다.

Function

이 함수는 Sub 함수가 아닌 리턴값이 있는 Function 함수입니다.

Calculator(…) As Integer

함수의 이름이기도 하고 변수이기도 합니다. 즉 이 함수는 실행하고 난 다음 Calculator 라는 정수형 변

수의 값을 리턴한다는 뜻입니다.(??? 조금 어렵죠?)

48

Page 49: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

(value1 As Integer, …)

매개 변수입니다.

Select Case method

method 값이 얼마냐에 따라 다음 행의 조건문을 수행하라는 Secect Case 문의 시작입니다.

Case plus | Calculator = valule 1 + value2

만약 method 값이 plus 이면, Calculator 의 값은 매개변수 value1 과 value2 를 합한 결과라는 뜻입니다.

End Seclect

Seclect Case 문의 끝입니다.

End Funtion

Function 함수는 이렇게 끝납니다.

5. [더하기] 커맨드 버튼을 더블클릭해서 아래와 같이 코드를 입력합니다.

o txtResult.Text = CStr(Calculator(CInt(txtValue1), CInt(txtValue2), plus))

o 마찬가지로 [빼기],[곱하기],[나누기]도 다음과 같이 입력합니다.

6. 이제 메뉴에 추가를 해야죠. 프로젝트 창에서 frmMenu 폼을 더블클릭하여 활성화한 다음 [도구]-[메뉴 편집기]에서 아

래와 같이 메뉴를 추가합니다.

49

Page 50: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

7. frmMenu 폼의 [VB 입문]-[함수연습]을 클릭하여 다음과 같은 코드를 입력합니다.

8. 자, 이제 다 끝났습니다. 실행해 보세요. 아래와 같이 실행되나요?

17. 예제로 익히는 ActiveX컨트롤(1)-파일시스템

ActiveX 가 뭔가? 어디선가 많이 들어본 것 같은데....

너무 거창하게 생각할 필요 없습니다. 지금까지 우리가 사용했던 각종 컨트롤이 모두 ActiveX 컨트롤입니다. 레이블, 텍스트박스,

콤보박스, 리스트박스, 타이머, 이미지 등 이미 많은 컨트롤을 사용했는데 그것들을 ActiveX 컨트롤이라고 부릅니다.

그러니까 이번 강좌부터 다룰 주제인 '예제로 익히는 ActiveX 컨트롤'도 사실 지금까지의 강좌와 별반 다를 게 없습니다. 다만

이번 시간부터는 지금까지 사용해왔던 또는 사용하지 않았던 컨트롤들의 사용법 위주로 설명을 하겠다는 것입니다. 그렇게 컨트

롤에 해 어느 정도 실습을 하고 난 다음 나중에 기회가 되면 종합 실습 프로그램을 하나 만들어보도록 하죠.

ActiveX 컨트롤에 한 사전적인 뜻을 알기 위해서는 먼저 컴포넌트, 컨테이너 등의 개념을 알아야 합니다. 컴포넌트든 컨테이너

50

Page 51: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

든 하나의 작은 프로그램이라고 생각하시면 되고요...더 궁금하시면 사전을 찾아보시고요.... 그렇게까지 몰라도 VB 입문하는 데

지장이 없으니 그냥 넘어가도록 하죠.

혹시 예전 6 강과 7 강에서 실습했던 그래픽뷰어 프로그램이 기억나시나요?

오늘은 업그레이드! 그래픽뷰어를 만들어보겠습니다.

예전에 만든 그래픽뷰어를 실행하면 아래와 같이 실행됩니다.

이 프로그램을 왜 만들었죠? 바로 콤보 박스와 리스트 박스의 사용법을 알아보기 위해 만들었었죠.

그런데 이 프로그램의 최 의 단점은...바로 실제로 자기가 원하는 파일을 선택할 수 없다는 데 있습니다.

오늘 만들 프로그램은 바로 원하는 드라이브의 원하는 폴더에서 원하는 그림 파일을 찾아 보여주는, 아래 그림과 같은 업그레이

드된 그래픽 뷰어를 만들어 보겠습니다.

먼저 지난 6 강과 7 강에서 배웠던 리스트 박스와 콤보 박스에 해 알고 있어야 합니다. 그런 의미에서 다시 6 강과 7 강을 한번

미리 훑어보고 실습에 임하는 것이 나을 것 같네요.

1. 실습에 앞서 아래 그림 파일을 다운로드하여 압축을 해제하여 c:₩vb실습 폴더에 복사해 둡니다.

실습 그림 파일 다운로드

51

Page 52: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

2. 지금까지 실습했던 "메뉴.vbp" 프로젝트를 실행합니다.

3. 빈 폼을 하나 추가하고 DriveListBox, DirListBox, ComboBox, FileListBox, Image, Label 등을 이용해 아래와 같이 디자

인합니다.

o 오늘 새롭게 선보이는 DriveListBox 컨트롤과 DirListBox, FileListBox 컨트롤은 아래 그림을 찹고하여 사용하시

기 바랍니다.

o 각각의 컨트롤의 속성을 아래와 같이 바꿔줍니다.

52

Page 53: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

4. [보기]-[코드]를 실행해 다음과 같이 코드를 입력한다.

o 컨트롤 이름과 이벤트 이름이 뭔지는 아시죠? 혹시나 모르시는 분 아래 그림을 참조하세요.

먼저 (일반)의 (선언)을 선택해서 다음과 같이 입력하세요.

Option Explicit 는 안써도 되지만, 앞으로 모든 변수를 선언해서 사용하겠다는 뜻입니다. 예전에 설명을 드렸을

겁니다. 실제 프로그래밍을 할 때는 써 주는 것이 좋다구요.

두번째 줄은

'디렉토리'라는 정수형 변수를 선언했습니다. 변수 이름을 한글로 쓰는 것은 실제 프로그래밍에서는 거의 없는

일입니다만, 우리는 지금 VB 에 입문하고 있는 과정이므로 변수 이름도 이해하기 쉽도록 한글로 써봤습니다. 실

행하는 데 오류는 전혀 없습니다.

o Form 컨트로의 Load 이벤트를 선택해 다음과 같이 입력합니다.

녹색 주석은 입력 안해도 됩니다.

이것이 무슨 뜻인지 모르시겠다구요? 그럼 저~어~기 6 강과 7 강을 다시 한번 보고 오세요.

o Dirve1 컨트롤의 Change 이벤트를 선택해 다음과 같이 입력합니다.

53

Page 54: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

드라이브를 변경할 경우 경로에 반영한다는 뜻입니다. 아래의 디렉토리, 파일 컨트롤과 함께 사용해야 하므로

이 세 가지 컨트롤에 한 코드를 주의깊게 보시기 바랍니다.

o Dir1 컨트롤의 Change 이벤트를 선택해 다음과 같이 입력합니다.

디렉토리를 바꿀 경우 파일 경로에 반영한다는 뜻입니다.

o File1 컨트롤의 Click 이벤트를 선택해 다음과 같이 입력합니다.

위에서 최종 선택된 파일 경로를 '디렉토리'라는 변수에 저장합니다.

만약 디렉토리의 끝자리가 '₩'로 끝나는 경우, 즉 C:₩ 또는 D:₩와 같을 경우 왼쪽에서 두번째까지만 읽으라는

코드도 포함되어 있습니다.

그래서 완성된 최종 경로의 그림 파일 이미지를 출력하고 디렉토리를 출력하라는 코드입니다.

o 마지막으로 Combo1 컨트롤의 Click 이벤트를 선택하여 다음 코드를 입력합니다.

코드 입력이 거의 다 끝났습니다.

전혀 모르겠다구요? 그래도 일단 그냥 따라하세요. 한꺼번에 이해하지 못해도 다 완성해 놓은 다음, 차근차근

그 뜻을 살펴봐야 합니다. 그래야 늡니다.

5. 이제 실습 메뉴에 포함을 시켜야죠. frmMenu 폼을 더블클릭하여 연 다음, [도구]-[메뉴 편집기]를 실행해 아래와 같이 '

그래픽뷰어 2' 메뉴를 가운데 추가합니다.

54

Page 55: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

6. frmMenu 폼의 [VB 입문]-[그래픽뷰어 2]를 클릭하여 다음과 같이 입력합니다.

55

Page 56: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

7. 정말 다 끝났습니다. 이제 실행해 보세요. 아래와 같이 정상적으로 작동되나요?

18. 예제로 익히는 ActiveX컨트롤(2)-스크롤바와 Shape

오늘은 비교적 간단합니다.

스크롤바를 이용해서 RGB 값을 변화시키는 실습입니다.

RGB 가 뭐냐고요?

RGB 는 Red, Green, Blue 의 약자입니다. 우리가 지금 화면으로 보고 있는 이 모니터에 나타나는 모든 색상은 이 세가지 색의

조합으로 만들 수 있습니다. 색이라기 보다는 빛이죠. 빨간 빛과 녹색 빛 그리고 파란 빛으로 화면 위의 모든 색을 만들 수 있습

니다.

VB 에서 RGB 값을 바꾸는 함수는 말그 로 RGB() 함수입니다.

RGB(255,255,255)는 흰색입니다. 반 로 RGB(0,0,0)은 검정색입니다.

여기서 첫번째 숫자는 R, 두번째 숫자는 G, 세번째 숫자는 B 를 가리킵니다. 따라서 모두 0 이면 아무런 색도 없는 검정 상태가

되고, 모두 최 값인 255 이면 흰색이 됩니다. (어라~ 모든 색을 다 섞었는데 왜 흰색이지? 바로 RGB 는 빛의 삼원색이기 때문

입니다. 우리가 학교에서 배운 색의 삼원색인 빨강,파랑,노랑을 다 섞으면 검정이 되지만 빛의 삼원색인 RGB 를 섞으면 흰색이

됩니다. 상식으로라도 알아두세요.....)

자, 그럼 지금부터 RGB 값을 스크롤 바를 이용해 마음 로 변화시키는 연습을 해보죠.

미리 오늘 실습 결과 프로그램을 볼까요?

바로 이 모습입니다.

56

Page 57: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. 먼저 VB '표준 EXE' 상태로 실행합니다.

오늘부터는 개별적으로 실습하기로 하죠. 실습 파일을 통째로 묶어서 계속할려니 설명하기가 조금 번거롭네요. 지금까지

꾸준히 실습해오셨던 분들은 오늘 실습 내용을 기존 메뉴에 추가해도 됩니다.

2. 아래와 같이 컨트롤을 배열하고 조절합니다. 먼저 아래 방법부터 읽어보시고 만드세요.

o 왼쪽 네모 모양은 Shape 컨트롤을 이용해 그립니다.

o 오른쪽 가로 스크롤바는 반드시 배열을 이용하여 그립니다.

배열을 이용하여 그리는 방법은 간단합니다. 먼저 가로 스크롤바(HScrollBar) 컨트롤로 맨 위에 하나를

만듭니다.

폼 위에 놓인 스크롤 바 컨트롤을 마우스 오른쪽 버튼을 이용해 복사해놓습니다.

57

Page 58: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

폼 위에 마우스 오른쪽 단추를 이용하거나 Ctrl+V 를 사용해 '붙여넣기'를 하면 다음과 같은 메시지가

나타납니다.

[예] 단추를 누르면 컨트롤 배열이 생성됩니다. (같은 이름의 컨트롤이 하나 더 만들어진다는 뜻입니

다.)

같은 방법으로 하나 더 만듭니다.

o Red, Green, Blue 레이블도 컨트롤 배열을 이용해 만듭니다.

처음 레이블을 하나 만들고 복사해서 두 개를 붙이면 됩니다.

o 각각의 컨트롤 속성을 다음과 같이 변경합니다.

3. 폼 위의 가로 스크롤 바(HScrollBar) 컨트롤을 더블클릭하여 코드 창이 열리면 다음과 같이 입력합니다.

o Private Sub HScroll1_Change(Index As Integer)

Index 값은 스크롤바의 순서를 나타냅니다.

스크롤바 컨트롤을 세 개를 만들었기 때문에 처음 만든 스크롤바는 HScroll1(0)이 됩니다. 두번째 스크롤바는

HScroll1(1), 세번재는 HScroll1(2)가 됩니다.

배열의 숫자는 0 부터 시작합니다.

o Shape1.FillColor = RGB(HScroll1(0).Value, HScroll1(1).Value, HScroll1(2).Value)

Shape1 의 색을 세개의 스크롤바의 값을 각각 R, G, B 값으로 하는 색으로 바꾼다는 뜻입니다. 코드를 잘 살펴

보세요.

4. 모든 것이 끝났습니다. 이제 실행해 보세요.

그리고 스크롤 바를 이용해 Red, Green, Blue 값들을 바꿔보세요.

58

Page 59: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

19. 예제로 익히는 ActiveX컨트롤(3)-추가실습

지난 시간에 스크롤 바 컨트롤을 이용해 Shape 의 RGB 색상을 바꾸는 실습을 했습니다.

그런데 뭔가 허전한 프로그램 같았죠?

Red, Green, Blue 의 배합에 따라 색상이 바뀌는 것까지는 좋았는데 실제 그 값들이 얼마인지 알 수가 없었습니다.

이번 시간에는 지난 시간에 만든 프로그램을 약간 수정해서

1. 스크롤 바가 움직임에 따라 실제 RGB 값이 몇인지를 숫자로 보여주는 기능

2. 스크롤 바뿐만 아니라 실제 RGB 값을 입력해서 색상을 바꾸는 기능

을 추가해 보겠습니다.

신 추가 실습 예제인만큼 설명은 생략하겠습니다.

첨부한 소스 파일을 다운로드하여 소스를 분석해 보시기 바랍니다.

59

Page 60: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

소스 내용을 미리 보여드릴까요?

20. 예제로 익히는 ActiveX컨트롤(4)-Common Dialog(상)

오늘은 우리가 여러 소프트웨어를 사용하면서 꽤나 익숙한 것을 하나 실습해보겠습니다.

프로그램을 사용하면서 파일 열기, 저장하기, 글꼴 바꾸기, 색상 바꾸기, 인쇄하기 등의 기능을 사용하게 되는데, 이러한 인터페

이스를 구현하려면 과거에는 무척 힘들었습니다.

그러나 비주얼 툴인 VB 를 사용하면 비교적 간단하게 이러한 인터페이스를 구현할 수 있습니다.

이럴 때 바로 Common Dialog 라는 컨트롤을 사용하게 됩니다. 그런데 이 컨트롤은 VB 를 실행할 때 기본적으로 표시되지 않기

때문에 별도의 컨트롤 추가 작업이 필요합니다.

따라서 이번 시간에는,

• Common Dialog 컨트롤 추가 방법에 해 알아보고

• 나아가 오류 메시지에 한 가장 간단한 처리 방법에 해 알아봅니다.

60

Page 61: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

오늘 실습하게 될 오류 메시지 처리 방법이란 오류가 발생할 때 그냥 넘어가

도록 하는 것을 말합니다. 지금까지 우리는 알게 모르게 VB 를 실행하다가 런

타임 오류가 발생하는 것을 경험했습니다.

그러나 모든 오류에 한 처리를 하기에는 아직 우리들의 내공이 부족하므로

그냥 오류가 발생하면 자동으로 무시하고 넘어가는 방법만 오늘 익히도록 하

겠습니다.

먼저 오늘 실습하게 될 프로그램이 실행된 모습입니다.(아니구나, 이번 강좌에 실습을 완전히 마치기가 힘들겠네요. 출근시간이

가까워지고 있으니 아무래도 강좌가 반 정도만 가능할 것 같네요....)

1. 늘 그랬듯이 먼저 VB 를 실행합니다. (표준 EXE 상태로 여는 것도 기본...)

2. Common Dialog 컨트롤을 컨트롤 도구 상자에 추가해야 합니다.

o 컨트롤 도구 상자의 빈 곳을 마우스 오른쪽 버튼으로 클릭합니다.

o 팝업 메뉴 중에서 '구성요소(O)'를 선택합니다.

61

Page 62: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 아래와 같이 Microsoft Common Dialog Control 6.0 의 왼쪽 네모 상자를 클릭하여 선택 표시를 하고 [확인] 단

추를 누릅니다.

o 빈 폼에 아래와 같이 Common Dialog Control 을 추가합니다.

컨트롤의 위치는 어느 곳이라도 괜찮습니다.

Common Dialog 컨트롤은 실제 프로그램을 실행할 때는 보이지 않습니다. 다만 그 '기능'을 사용할 수

있을 뿐입니다.

다시 말씀드립니다. Common Dialog 컨트롤은 예전의 텍스트 박스, 레이블, 커맨드 버튼처럼 눈에 보

이면서 기능을 하는 것이 아니라, 보이지는 않지만 어떤 기능을 사용할 수 있는 컨트롤입니다.

62

Page 63: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 다음과 같이 컨트롤을 배열합니다.

사용된 컨트롤은 위쪽부터 TextBox, Label, CommandButton 컨트롤입니다. 다 실습해봤던 것들입니다.

o 아래와 같이 컨트롤의 속성을 바꿔줍니다.

21. 예제로 익히는 ActiveX컨트롤(4)-Common Dialog(하)

지난 시간에 이어서 계속합니다.

63

Page 64: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. [글꼴] 버튼을 더블클릭해서 Command1 의 Click 이벤트에 다음 코드를 입력합니다.

코드를 하나하나 살펴 봅니다.

① On Error GoTo font_error

② CommonDialog1.Flags = cdlCFBoth

③ CommonDialog1.ShowFont

④ Label1.FontName = CommonDialog1.FontName

⑤ Label1.FontSize = CommonDialog1.FontSize

⑥ Label1.FontBold = CommonDialog1.FontBold

⑦ Label1.FontItalic = CommonDialog1.FontItalic

⑧ Label1.Caption = Text1.Text

⑨ font_error:

o 먼저 ①번을 읽어보면 직감적으로 무슨 뜻인지 감이 잡힐 겁니다.

만약 에러가 발생하면 font_error 로 이동하라는 말인데...font_error 가 어딨죠? 제일 밑에 ⑨번 라인입니다.

가장 간단한 오류 처리 코드입니다. 중요한 것은 ⑨번 라인에서 반드시 콜론(:)을 써야한다는 것, 이 정도만 아

시면 되겠네요.

o ②번의 Flags 속성은 [글꼴] 버튼을 눌렀을 경우 나타나는 글꼴 변경 화 상자의 옵션을 설정하는 것입니다.

흔히 위와 같이 cdlCFBoth 값을 쓰면 무리가 없습니다. cdlCFBoth 값은 화 상자에서 화면용 글꼴과 인쇄용

글꼴을 모두 표시하라는 뜻입니다. 다른 속성값들에 해서는 알 필요도 없을 것입니다. 으례히 Flags 의 속성

값은 cdlCFBoth 뿐이다 라고 생각하면 됩니다.

o ③의 ShowFont 메소드는 글꼴을 바꾸는 화 상자가 나타나도록 합니다. 아래 실습에서 계속하겠지만 만약 색

상을 바꾸려면 ShowColor 메소드를 사용합니다.

o ④~⑦까지는 글꼴 변경 화상자에서 '글꼴', '크기', '글꼴유형' 등의 값을 변경했을 경우 적용하라는 뜻입니다.

64

Page 65: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o ⑧은 텍스트박스에서 입력한 문장을 레이블에 출력하라는 것인데, 위의 ④~⑦의 변경값을 그 로 적용해서 보

여주는 것입니다.

무슨 뜻인지 잘 이해가 안갈 경우에는 직접 실행해보면 쉽게 이해할 수 있습니다.

위의 코드만 입력하더라도 일단 실행하는 데는 무리가 없으니 [F5]키를 눌러 실행해 보세요. 그리고 [글꼴] 단추를 눌

러 어떤 식으로 변하는지 확인해보세요.

2. 폼의 [배경색] 버튼을 더블클릭해서 Command2 의 Click 이벤트에 다음과 같이 코드를 입력합니다.

[글자색] 버튼을 더블클릭해서 Command3 의 Click 이벤트에도 아래와 같이 코드를 입력합니다.

마지막으로 텍스트박스를 더블클릭해서 Text1 의 Change 이벤트에 아래와 같은 코드를 입력합니다.

o Command2 와 Command3 에서 각각 Flags 속성값을 변경한 다음 ShowColor 메소드를 사용했습니다.

ShowColor 를 사용하기 전에 Flags 값에 따라 ShowColor 를 실행해 나타나는 화상자의 모양이 달라집니다.

만약 Flags 의 속성값을 위와 같이 cdCCRGBInit 라고 지정한 후 ShowColor 을 사용하면 아래와 같은 화상자

가 나타납니다.

65

Page 66: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

만약 Flags 의 속성값을 위와 같이 cdCCFullOpen 이라고 지정한 후 ShowColor 을 사용하면 아래와 같은 화

상자가 나타납니다.

o Label1.BackColor 은 배경색의 속성이고 Label1.ForeColor 은 글자색의 속성을 말합니다.

o Text1 의 Change 이벤트에서는 텍스트박스(Text1)의 값이 바뀌면 레이블(Label1)에 표시하라는 코드를 입력했

습니다.

3. 이제 모든 코드의 입력이 끝났으니 직접 실행해 보세요

그리고 위에서 입력한 코드를 하나하나 다시 살펴보면서 그 의미를 되새기기 바랍니다.

지난 시간과 이번 시간에 걸쳐 실습한 내용에서 크게 어려운 것은 없습니다.

66

Page 67: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

다만 CommonDialog 컨트롤은 사용자 인터페이지 화면을 만드는데 상당히 편리하다는 것을 실감할 수 있습니다. 만약

CommonDialog 컨트롤이 없다면 글자색, 배경색, 글꼴 모양을 바꾸는 프로그램을 코딩하려면 얼마나 복잡하고 어려웠겠습니까...

이왕 CommonDialog 컨트롤을 실습했으니 다음 시간에는 CommonDialog 컨트롤의 다른 메소드들(파일 열기, 저장하기, 인쇄하

기 등)에 해서 간단하게 실습하는 기회를 가지도록 하겠습니다.

22. 예제로 익히는 ActiveX컨트롤(5)-MSFlexGrid

예제로 익히는 액티브 X 컨트롤, 오늘은 그 다섯번째로 MSFlexGrid 를 실습해보겠습니다.

영어 사전에서 Grid 를 찾아보면 '격자'라는 뜻이 있습니다. 바둑판의 눈금과 같은 것을 말합니다.

Flex 는 flexible 의 준말이니 융통성이 있다는 뜻입니다.

뜻풀이를 통해 짐작을 하셨겠지만 MSFlexGird 는 마치 엑셀의 셀모양과 같은 도표로 표시하는 기능을 합니다.

다음은 오늘 실습할 MSFlexGird 를 사용한 예제를 실행한 화면입니다.

실습을 통해 MSFlexGrid 컨트롤과 더불어 For ~ Next 문, SetFocus 메소드 등도 함께 다루기로 하겠습니다.

1. VB 를 실행합니다.(늘 그렇듯이 '표준 EXE'로 실행합니다.)

2. 오늘 실습할 MSFlexGird 컨트롤은 기본 컨트롤 도구 모음에 없으니 아래와 같이 새롭게 추가합니다.

o 컨트롤 도구 모음의 빈 곳을 마우스 오른쪽으로 클릭하여 팝업 메뉴를 표시합니다.

o 팝업 메뉴에서 [구성 요소(O)]를 선택합니다.

67

Page 68: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o [구성 요소] 화상자에서 Microsoft FlexGrid Contrl 6.0 을 찾아 체크 표시를 하고 [확인]을 클릭하면 컨트롤

도구 모음에 MSFlexGrid 컨트롤이 나타납니다.

3. 다음과 같이 폼을 구성합니다.

o

o 먼저 MSFlexGrid, Label, TextBox, CommandButton 컨트롤을 이용하여 폼 위에 컨트롤을 배치합니다.

o 다음과 같이 각 개체의 속성을 변경합니다.

68

Page 69: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

FixedRows 와 FixedCols 속성는 고정된 열과 행의 수를 지정하는 것입니다. 엑셀에서 행 머리글과 열 머리글에

해당하는 것입니다. 즉 내용을 입력할 수 없는 회색으로 표시된 셀을 말하죠.

그리고 Rows 와 Cols 의 숫자를 각각 4 와 5 로 하여 4 행 5 열의 그리드를 만든 것입니다.

4. 메뉴에서 [보기]

5. [코드]를 실행한 후 다음과 같이 코드를 작성합니다.

o 먼저 프로그램에 사용될 변수를 선언합니다. 가장 윗 줄에 아래와 같이 그 로 적으면 됩니다.

Dim tempRow, tempCol, tempCell, Sum, Average As Integer

o Form 개체의 Load 이벤트를 선택하여 위 ①과 같이 코드를 입력합니다.

※Form 개체의 Load 이벤트를 선택하려면 아래와 같이 하세요.

또는 폼의 빈 곳을 더블클릭해도 됩니다.

Form_Load() 부분은 프로그램을 실행했을 때 가장 먼저 실행되는 부분입니다.

따라서 아직은 비어있는 MSFlexGrid 에 아래와 같은 내용을 집어 넣기 위한 코드입니다.

코드와 아래 그림을 잘 보면 그 뜻을 이해하기가 어렵지 않을 것입니다.

69

Page 70: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

단 여기서 주의해야할 것은 TextMatrix(Row,Col)와 같이 행에 해당되는 숫자를 먼저 쓰고, 다음에 열에 해당하

는 숫자를 씁니다. 그런데 행과 열의 첫 숫자는 0 으로 시작합니다.

따라서 grdFlexGrid(0,0)이 가장 왼쪽 상단 모서리의 셀을 나타냅니다.

o grdFirst 개체의 Click 이벤트를 선택하여 위 ②와 같이 코드를 입력합니다.

첫줄의 txtJumsu.SetFocus 의 뜻은,

그리드의 어떤 곳을 클릭했을 때 즉 그리드에 클릭 이벤트가 발생했을 때(gridFirst_Click()), txtJumsu 라는 텍스

트 박스에 커서를 위치하고 활성화하라는 뜻입니다.

따라서 셀의 어떤 곳을 클릭하면 바로 텍스트 박스에서 입력 준비가 되는 것입니다.

o txtJumsu 개체의 Change 이벤트를 선택하여 위 ③과 같이 코드를 입력합니다.

텍스트 박스에 내용이 바뀌면 바로 MSFlexGrid 의 해당 셀에 그 내용을 반영하라는 뜻입니다.

o cmdAverage 개체의 Click 이벤트를 선택하여 위 ④와 같이 코드를 입력합니다.

입력된 내용을 바탕으로 평균을 계산하는 로직입니다.

두 개의 For 문으로 되어 있습니다. 일명 중첩된 For~Next 문이라고 합니다.

행의 숫자를 1 에서 3 까지 바뀌는 동안, 열의 숫자도 1~3 까지 하나씩 증가하면서 각 셀의 값을 더하기 위한

로직입니다.

즉 처음 행의 숫자가 1 일 때, 열의 숫자가 1 부터 3 까지 바뀌면서 값을 하나하나 누적해서 더합니다.

그런 다음 합계를 3 으로 나누어 평균을 구한 값을 grdFirst.TextMatrix(1,4)의 값에 입하는 것입니

다.(1,4 라는 표현은 실제로는 2 행 5 열이라는 뜻입니다.)

다시 행의 숫자가 2 일 때, 마찬가지로 열의 숫자가 1 부터 3 까지 바뀌면서 값을 누적해서 더하고, 평

균을 구하여 grdFirst.TextMatrix(2,4)에 입합니다.

다시 같은 방법으로 grdFirst.TextMatrix(3,4)에 값을 입하고 For~Next 문을 완전히 마칩니다.

이 부분이 프로그램의 핵심 로직이 됩니다. 프로그래밍 왕초보분이라면 이 부분이 제일 어려울 수 있습니다. 보

고 또 봐서 그 뜻을 꼭 이해하시기 바랍니다.

6. [F5]를 눌러 프로그램을 실행해 보세요.

정상적으로 실행이 되면 적당한 이름을 저장하세요. 필요하다면 실행 파일도 만드시구요.(실행 파일 만드는 방법 아시

죠? 아주 옛날에 실습했습니다. 아마도 시계 만들 때 했을걸요.)

23. 예제로 익히는 파일 시스템(1) - 순차 접근 파일

이번 강좌에서는 실제로 파일의 입출력에 관한 실습을 합니다.

비주얼베이직에서 다루고 있는 파일 시스템은 크게 순차 접근 방식, 임의 접근 방식, 이진 접근 방식 등으로 나눌 수 있습니다.

흔히 순차 액세스(Sequential Access), 랜덤 액세스(Random Access), 이진 액세스(Binary Access) 방식이라 말합니다.

70

Page 71: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

순차 접근 파일은 개 텍스트 파일의 입출력에 많이 사용되고, 그외에는 랜덤 액세스 파일이나 이진 액세스 파일이 주로 사용됩

니다.

구체적인 실습을 통해 그 차이를 살펴보기로 하죠.

총 2 회에 걸쳐 실습을 하겠는데, 이번 시간에는 순차 접근 방식으로 파일의 입출력 기능을 구현해 보기로 하고, 다음 시간에는

랜덤 액세스 파일 방식의 입출력 기능을 구현해 보기로 합니다.

일단 다음과 같이 따라하면서 프로그램을 먼저 만들어 보겠습니다.(프로그램을 일단 완성해서 구체적으로 실행하면서 실제 그 기

능을 눈으로 확인한 다음 자세한 설명을 하는 것이 보다 쉽게 이해하실 것이라 생각합니다.)

1. VB 를 실행합니다.

2. 아래와 같이 화면을 구성합니다.

o TextBox 와 CommandButton 컨트롤만 사용하면 됩니다.

o 다음과 같이 속성을 변경합니다.

o TextBox 의 속성 중 MultiLine 속성이 True 로 되어 있어야 여러 줄의 텍스트를 작성할 수 있습니다. 스크롤 바

는 세로 스크롤 바만 보이도록 설정했습니다.

71

Page 72: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 아래와 같이 코드를 입력합니다.

o cmdOutput, cmdInput, cmdAppend, cmdClear 개체(컨트롤)의 Click 이벤트에 한 각각의 코드입니다.

o 만약 위의 코드를 처음부터 끝까지 그 로 입력하지 않고, 개체 목록과 이벤트 목록에서 선택하여 코드를 입력

하면 실제로는 위의 그림과 같은 순서 로 표시되지 않습니다. 설명을 편하게 하기 위해 순서를 조금 바꾸었습

니다.

만약 cmdOutput_Click()의 코드를 입력한 다음, cmdInput 개체의 Click 이벤트를 선택하면 cmdOutput_Click()

코드의 위쪽에 위치하게 됩니다.

o 코드에 한 자세한 설명은 일단 프로그램을 실행한 다음 하겠습니다.

4. 프로그램을 실행합니다.

o 먼저 임의의 문장을 입력하고 [저장하기]를 클릭합니다.

아마도 VB 가 설치된 폴더인 C:₩Program Files₩Microsoft Visual Studio₩VB98 폴더에 "순차실습.txt" 파일이

생성되었을 것입니다.

위의 코드에서 "순차파일.txt" 부분을 "c:₩data₩순차파일.txt"와 같이 바꾸면 파일이 저장되는 위치가 바뀌겠

죠...

o [화면 지우기]를 클릭해서 텍스트 박스의 내용을 지웁니다.

o [불러오기]를 클릭하면 조금 전 저장했던 내용이 다시 보입니다.

72

Page 73: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o [화면 지우기]를 클릭해서 텍스트 박스의 내용을 지웁니다.

o 텍스트 박스에 임의로 내용을 다시 입력합니다.

o 이번에는 [덧붙이기]를 클릭합니다.

o [불러오기]를 클릭하면 처음 텍스트 파일에 저장했던 내용에 방금 추가했던 문장이 더해져서 보입니다.

이제 뭔가 감이 잡히죠?

몇가지 설명을 드리겠습니다. 아래 표를 볼까요.

Open 과 Close 는 어떤 파일 형식에든 다 사용하는 것이고 입력과 출력과 관련된 명령어가 조금 다르죠?

오늘과 다음 실습에 사용되는 명령어만 알아도 충분할 것입니다. 오늘은 Input#와 Print#를 사용했습니다.

다음 시간에는 Get, Put, Type…End Type 을 사용할 것입니다.

• Open 파일명 For [ Input | Output | Append ] As #번호

o 위에서 [ ]로 둘러쌓인 부분은 하나만 선택해야 합니다. 예를 들어,

Open "실습.txt" For Input As #1 과 같이 말입니다.

Input 은 입력용 파일, Ouput 은 출력용, Append 는 추가용으로 파일을 사용하겠다는 것입니다.

이때 혼동하기 쉬운 것이 입력, 출력의 개념입니다. 여기서 말하는 입력은 '메모리'에 입력한다는 뜻으로 우리가

흔히 생각하는 디스크에 무언가를 입력해서 저장한다는 뜻이 아닙니다.

따라서 우리가 흔히 생각하는 입력, 즉 디스크에 무언가를 쓰는 것이 여기서는 출력(Output)의 의미로 사용됩니

다. 즉 메모리에 있는 내용을 디스크로 출력한다는 뜻입니다.

따라서 VB 프로그래밍에서 말하는 입력은 데이터를 읽어온다는 뜻으로, 출력은 현재의 데이터를 쓴다는 뜻으로

이해를 해야 합니다.

o #번호는 임의 로 부여하면 됩니다. 일종의 닉네임이죠.

예를 들어 Open "실습.txt" For Input As #1 으로 선언했다면 지금부터 "실습.txt" 파일을 지칭할 때는 #1 으로

신하겠다는 뜻입니다. 반드시 #1 일 필요는 없습니다. #2, #3 라고 부여해도 됩니다.

• Close #번호

Open 으로 파일을 열어놓은 경우는 반드시 Close 문을 사용해서 닫아야 합니다.

Close 에서 사용한 #번호는 Open …As #번호에서 사용한 파일 번호와 동일한 것을 사용해야 합니다.

• Print #1, txtData.Text

#1 파일, 즉 "순차실습.txt" 파일에 텍스트박스의 내용(txtData.Text)을 쓰라는 뜻입니다.

73

Page 74: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

74

• Do Until EOF(1) …Loop

Do Until ~ Loop 문은 반복문입니다. Until 뒤의 조건이 참일 때 계속해서 반복하라는 뜻입니다.

EOF 는 End Of File, 즉 파일의 끝을 의미합니다. EOF(1)의 1 은 참을 의미합니다. 0 이면 거짓이고.... 따라서 EOF(1)은

파일의 끝이 참인 것, 즉 "파일의 끝까지"라는 뜻입니다.

파일을 열어 처음부터 파일의 끝까지 Do Until 과 Loop 사이의 명령을 반복하라는 것이죠.

• Input #1, InputData

#1 파일("순차실습.txt")의 한 줄을 읽어서 InptuData 라는 변수에 저장하라는 뜻입니다.

아까 말했죠? Input 은 메모리에 입력한다는 뜻이라고. 즉 파일을 열어 한 줄을 읽은 다음 메모리의 InputData 라는 변수

에 저장하라는 뜻입니다.

• textFile = textFile + InputData + Chr(13) + Chr(10)

읽어들인 문장을 계속해서 더하라(연결하라)는 뜻입니다. 여기서 Chr(13) + Chr(10)은 엔터키 역할을 합니다. 즉 다음 줄

로 이동해서 다음 줄 처음으로 위치하도록 합니다.

처음에 파일에서 한 줄의 문장을 읽어들이고, 다시 한줄을 읽어들여서 처음 읽어들인 문장과 연결을 하되 마지막에

Enter 를 친 효과를 추가하라는 뜻입니다.

이 부분, 이해될 때까지 다시 보고 또 보세요....이런 식의 코드를 많이 접하게 될 것입니다.

예를 들어 1 부터 10 까지의 합을 구하는 로직이라면

Sum = 0

For i = 1 to 10

Sum = Sum + i

Next i

와 같이 씁니다.

여기서 Sum = Sum + i 가 바로 이전의 값들을 누적하는 기능을 합니다.

위에서 실습한 textFile = textFile + InputData 와 어딘가 많이 닮았죠? 꼭 이해를 하셔야 합니다.

• 위의 설명이 이해가 되었으면 나머지 코드는 그리 어렵지 않을 것입니다.

꼭 이해를 하고 넘어가세요....

24. 예제로 익히는 ActiveX컨트롤(6)-ProgressBar

원래 이번 강좌는 "예제로 익히는 파일 시스템(2) - 랜덤 액세스 파일"을 할 차례입니다.

그러나 파일 시스템을 하기 전에 지난 강좌에서 빠뜨린 부분이기도 하고 머리도 식힐 겸 액티브 X 컨트롤을 하나 더 다뤄볼까

합니다.

오늘 다룰 예제는 ActiveX 컨트롤 중 유용하게 사용할 수 있는 진행 표시줄(ProgressBar) 컨트롤에 한 것입니다.

진행 표시줄은 여러 프로그램에서 흔히 접할 수 있는 개체입니다.

아래 그림을 보시죠.

Page 75: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

어떤 기능을 하는지는 이해되시죠? 바로 위의 그림과 같은 실습 예제를 만들어 봅니다.

단, 실제 복사 작업이 이루어지지는 않고 다만 화면으로만 복사 시작, 완료 등을 표시하는 것입니다.

1. VB 를 실행합니다.(물론 '표준 EXE' 프로젝트로 실행합니다.)

2. Microsoft Windows Common Controls 6.0 을 추가합니다.

o 새로운 컨트롤 추가하는 방법은 이전 시간에서도 해봤습니다. 컨트롤 도구 상자의 빈곳에 마우스 오른쪽 단추로

클릭하여 [구성 요소]를 선택하는 방법이었죠..(앞의 23 번 강좌를 참조하세요.)

o 이번 시간에는 다른 방법으로 추가해 볼까요. 아래와 같이 [프로젝트] 메뉴에서 [구성 요소]를 클릭합니다. 그

리고 [구성 요소] 화상자에서 Microsoft Windows Common Controls 6.0 을 선택합니다.

o 컨트롤 도구 상자에 새로운 컨트롤이 여러개 추가될 것입니다. 아래 그림 중 ③번 컨트롤이 바로 오늘 실습할

ProgressBar 컨트롤입니다.

75

Page 76: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 다음과 같이 폼 디자인을 합니다.

사용된 개체와 속성은 다음과 같습니다.

4. 다음과 같이 코드를 작성합니다.

o ①번 코드는 cmdCopyStart 개체("복사 시작" 버튼)의 Click 이벤트에 한 실행 코드(프로시저)입니다.

For ~ Next 문을 사용하여 For ~ Next 사이의 코드를 temp 값이 0 에서 100 까지 변하는 동안 계속 실

행합니다.

DoEvents 는 이 프로그램이 실행되는 동안 다른 컴퓨터(CPU)가 다른 일도 하라는 뜻입니다.

무슨 말이냐믄요, 지금과 같이 간단한 프로그램이어서 0 부터 100 까지 변하는 동안 채 1 초도 걸리지

않으면 문제가 없지만, 만약 실제 어떤 파일의 복사 작업을 한다고 생각할 경우 복사하는 파일의 크기

에 따라 상당히 오랜 시간이 걸릴 수도 있습니다.

그런데 이 프로그램이 복사 작업을 하는 동안 컴퓨터가 틈틈히 다른 일도 해야한다는 뜻입니다. 만약

76

Page 77: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

위에서 DoEvents 명령어를 쓰지 않았다면 컴퓨터는 아무리 큰 파일이라도 그것을 복사하는 동안 다른

일들을 못하게 됩니다. 마치 컴퓨터가 멈춰버린 듯한 상황이 되는 거죠...아시겠죠?

메시지 박스(MsgBox)는 뭔지 아시죠? MsgBox 뒤에 처음 오는 문자는 메시지 박스에서 표시할 메시지

이고, 두번째는 메시지 박스의 유형입니다. 여기서는 vbOKOnly 즉 확인 단추만 있는 유형을 선택했습

니다. 그리고 마지막의 옵션은 메시지 박스의 제목입니다. 그래서 실행이 되면 이런 모양이 나오죠.

o ②번 코드는 cmdExit 개체("종료" 버튼)의 Click 이벤트에 한 프로시저입니다.

프로그램을 끝내라는 뜻입니다.

다 끝났습니다. 실행하여 [복사 시작] 단추를 누르면 순식간에 그냥 "복사 완료"라는 메시지가 나타납니다.

실제로 복사하는 것이 아니라 그렇게 보이도록 만들어 놓은 것이니 순식간에 끝날 수밖에요.

응용 프로그램을 만들 때는 위 코드 중 ①번 부분을 실제 작업이 수행되도록 고쳐야겠죠...

25. 예제로 익히는 파일 시스템(2) - 랜덤 접근 파일(上)

계획 로 이번 시간에는 전전 강좌에 이어 파일 입출력 실습을 해보겠습니다.

이번 시간에는 랜덤 액세스(임의 접근) 파일에 한 실습을 하는데 제가 알기로는 실무 활용율이 다소 떨어집니다.

개 텍스트 파일의 입출력을 위해서는 이미 실습한 순차 접근 방식으로 파일을 처리하고, 오늘처럼 레코드 관리를 위해서는 DB

를 이용하기 때문입니다.

그러나 일단 파일 입출력과 관련된 개념을 익히기 위해 랜덤 파일 처리에 해 간단한 실습을 해보겠습니다.

간단한 실습이지만 설명할 것이 조금 있어서 2 회로 나누어 설명을 하도록 하겠습니다.

먼저 이번 시간과 다음 시간에 걸쳐 실습하게 될 프로그램의 실행 모습입니다.

어떤 실습을 할지 감이 잡히시죠?

77

Page 78: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

자, 아래와 같이 일단 한번 만들어 봅시다.

설명은 나중에 하기로 하구요.

1. VB 를 '표준 EXE' 프로젝트로 실행합니다.

2. 아래와 같이 폼을 만듭니다.

o 레이블, 텍스트 박스, 커맨드 버튼 컨트롤을 위와 같이 배치합니다.

o 속성을 다음과 같이 변경합니다.

78

Page 79: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 코드 창을 열어 아래와 같이 코드를 작성합니다.

[조회] 버튼에 한 코드는 작성하지 않았습니다. 조회 버튼을 눌렀을 때의 기능에 해서는 다음 시간에 다루기로 하겠

습니다.

4. 코드를 다 작성했으면 실행을 해야죠...(잘 되죠?)

혹시 잘 안되면 ④번 중간 쯤에 Put #iFilename, , tPerson 이라는 부분에서 쉼표를 두 번 쓰지 않았을 확률이 높은데...

코드를 잘 살펴보세요. 그래도 안되면 아래 해설을 보시면서 하나하나 이해하면서 찾아보세요.

설명할 게 좀 많네요.

차근차근 설명을 하겠습니다.

먼저 위 코드 중에서 ①번 부분입니다.

Private Type usrPerson

strName As String * 10

strRegion As String * 10

strContact As String * 13

79

Page 80: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

80

End Type

새로운 데이터 형을 선언하는 것입니다. 잘 보시면 알겠지만 문자열 변수 세 개를 묶어서 하나의 데이터 형을 만든 것입니다.

strName, strRegion, strContact 문자열 변수의 길이가 각각 10, 10, 13 입니다.

여기에 각각 이름, 지역, 연락처를 저장하기 위한 데이터 형을 만든 것입니다. 즉 이름, 지역, 연락처를 하나의 세트로 만들어 이

것을 특별한 데이터 타입으로 선언한 것입니다.

이것이 레코드가 되는 것입니다.

레코드는 데이터베이스 용어인데, "손병목 서울 02-123-1234"라는 전체를 하나의 레코드라고 합니다.

그리고 이름, 지역, 연락처를 각각 필드 이름이라고 합니다.

예를 들어 전화번호부가 있다면, 이름, 주소, 전화번호 등의 항목으로 구성되는데 이것을 필드 이름이라고 하고

"김갑돌 서울시 종로구... 3322-1123"와 같이 김갑돌에 한 주소와 전화번호를 통틀어 하나의 레코드라고 합니다.

전화번호부는 수천~수만개의 레코드로 구성되어 있는 셈이죠.

Dim iFileNum As Integer

Dim tPerson As usrPerson

iFileNum 변수에는 파일 번호가 들어갑니다. 이미 순차 파일 처리할 때 실습했듯이 파일을 열고 닫을 때는 반드시 파일 번호를

써 줘야 했습니다.

#1, #2 와 같은 식으로 사용했는데, 이번 실습에서는 파일 번호를 변수로 처리하겠습니다. 만약 어떤 프로그램을 만들 때 여러

개의 파일을 다루어야 한다면 일일이 #1, #2...와 같이 코딩하기가 힘드니까 파일 번호를 저장하는 변수를 만든 다음 현재 사용

하지 않는 파일 번호를 자동으로 입하는 식으로 처리하고 있습니다. 아래에서 다시 설명합니다.

Dim tPerson As usrPerson : 위에서 새로운 usrPerson 이라는 새로운 데이터 형을 만들었습니다. tPerson 이라는 변수는 바로

usrPerson 과 같은 데이터를 저장할 수 있는 변수가 되는 것입니다.

②번 부분을 살펴보죠.

Private Sub Form_Load()

iFileNum = FreeFile ' 사용가능한 파일번호 자동 부여

Open App.Path + "₩cardfile.txt" For Random As iFileNum Len = Len(tPerson)

' App.Path 는 현재 VB 파일이 저장된 위치

End Sub

랜덤 파일을 열 때는 다음과 같이 엽니다

Open 파일이름 For Random As 파일번호 레코드길이

FreeFile 명령은 현재 사용하지 않는 파일 번호를 돌려줍니다.

App.Path는 현재 경로를 말합니다. 즉 지금 폼을 만들어 저장하여 작업하고 있는 디렉토리를 나타냅니다.

For Random은 파일을 랜덤 형식으로 열겠다는 뜻이고,

Len()은 괄호 속의 데이터의 길이를 돌려줍니다.

너무 복잡한가요? 결국 아래와 같은 뜻입니다.

Page 81: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

Open "c:₩vb실습₩cardfile.txt" For Random As #1 Len=33

③번은 폼을 닫을 때 열어 둔 파일을 닫으라는 뜻입니다.

설마 직접 Private Sub Form_Unload(Cancel As Integer)를 직접 입력하신 건 아니죠?

Form 개체를 선택하고 Unload 이벤트를 선택하면 됩니다.

마지막으로 ④번 부분을 살펴봅니다.

그냥 보시면 거의 이해가 되죠?

tPerson.strName과 같은 식으로 사용합니다.

tPerson은 세 개의 문자열 변수로 이루어진 데이터를 저장할 수 있는 변수입니다.

이 변수는 strName, strRegion, strContact 변수를 모두 포함하고 있으므로 각각의 변수를 지정할 때는 tPerson.strName 과 같은

식으로 지정해야 합니다.

Put 파일번호, 위치, 데이터 : 랜덤 파일은 이런 식으로 파일에 데이터를 기록합니다. Put 명령을 사용합니다.

23강에서 파일 처리와 관련된 명령을 정리한 도표가 기억 나나요?(기억 안나면 여기를 클릭해서 도표를 보세요...)

Put #iFileNum, , tPerson에서 iFileNum은 파일 번호를 저장한 변수이고,

두번째 매개변수는 생략하였습니다. 이렇게 생략하면 이전 데이터의 끝에 새로운 데이터를 기록한다는 뜻입니다.

정리하면, tPerson의 데이터를 현재 열려있는 파일의 끝에 기록한다는 뜻이 되겠죠.

txtName.Text = "" 는 텍스트 박스의 내용을 지우는 것입니다.

즉 현재 폼에서 [추가] 버튼을 눌러 데이터를 파일에 쓰고 난 다음에 텍스트 박스를 빈칸으로 만들라는 뜻입니다. 그래야 다른

데이터를 쓸 테니까요.

txtName.SetFocus 는 커서를 이름 입력 란에서 깜빡깜빡하라는 것입니다.

26. 예제로 익히는 파일 시스템(2) - 랜덤 접근 파일(下)

지난 시간에 이어 랜덤 파일 실습 계속합니다. 지난 시간과 마찬가지로 일단 폼을 만들고 코딩을 다 하고 난 다음에 설명을 드리

도록 하죠.

1. 지난 시간에 작성한 frmRandom 폼의 코드 창을 열어 cdmDisplay 개체의 Click 이벤트에 다음의 코드를 추가합니다.

[조회] 단추를 누르면 frmDisplay 폼이 나타나도록 한 것입니다.

2. 그러면 frmDisplay 폼을 만들어 봅시다.

81

Page 82: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o 아래와 같이 폼을 디자인합니다. 지난 시간의 frmRandom 과 거의 유사합니다.

o 다음과 같이 속성 값을 변경합니다.

82

Page 83: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

3. 코드 창을 열어 다음과 같이 코딩을 합니다.

4. 그럼 실행을 해보세요.

o 실행을 하면 frmRandom 폼(랜덤 파일 실습 창)이 나타나죠. 데이터를 여러 개 입력하고 난 다음에

o [조회] 단추를 눌러 frmDisplay 폼(랜덤 파일 조회 창)을 엽니다.

o [<<] 와 [>>] 단추를 눌러 입력한 데이터를 앞 뒤로 검색해 봅니다.

코드를 살펴 볼까요?

① 부분은 지난 시간의 코드와 비슷합니다. tPerson이라는 새로은 데이터 형을 선언하고 몇 가지 변수를 선언하였습니다.

전체 레코드의 개수(iFileNumOfRec)와 현재 레코드의 위치(iCruRec)를 저장하기 위한 변수가 추가되었네요.

②는 사용자 정의 함수입니다.

Display_File( )이라는 Sub 함수를 만든 것입니다.

83

Page 84: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

84

③,⑤,⑥을 살펴보면 Call Display_File 이라고 씌어진 부분 있죠? 바로 이 함수를 실행하라는 것이죠.

이 함수(프로시저)의 기능은 쉽게 이해됩니다.

Get 명령은 랜덤 파일을 읽을 때 사용합니다.

Get 파일 번호, 레코드 위치, 데이터와 같은 식으로 사용됩니다.

#iFileNum 파일을 열어서 tPerson이라는 데이터에서 iCurRec 위치의 레코드를 읽으라는 뜻입니다.

그렇게 읽어서 첫번째 텍스트 박스에 tPerson의 이름 필드(항목)의 내용을 표시합니다.(txtName.Text=tPerson.strName)

같은 방식으로 지역과 연락처도 표시합니다.

③은 폼이 열릴 때 자동으로 실행되는 부분인데, Form 개체의 Load 이벤트에 작성합니다.

파일을 랜덤 형식으로 열어서 전체 중에서 처음 레코드를 표시하라는 것입니다.

현재 레코드를 표시할 때 위 ②에서 작성한 Display_File 함수를 실행했습니다.

LOF 함수는 파일의 길이를 구할 때 사용합니다.

형식은 LOF(파일번호)와 같은 식으로 사용합니다.

따라서 위와 같이 LOF(iFileNum)는 현재 열린 파일(cardfile.txt)의 전체 길이를 구하라는 것입니다. 전체 길이를 구해서

Len(tPerson)으로 나누었습니다.

tPerson은 하나의 레코드가 들어갈 수 있는 변수이니까, 전체 레코드의 길이에서 하나의 레코드의 길이를 나누면 전체 레코드의

개수가 구해집니다.

부분 레코드의 개수를 구할 때는 이와 같은 방법을 사용합니다. 이렇게 구한 전체 레코드이 개수를 iNumOfRec 변수에 저장을

하는 것이죠.

④는 Form 개체의 Unload 이벤트에 작성한 코드입니다.

폼을 닫을 때 현재 열린 파일을 닫아주라는 것입니다.

⑤는 [<<] 단추를 눌렀을 때 현재 레코드보다 앞쪽의 레코드를 표시하라는 것이죠.

단 현재 레코드의 위치(iCurRec)가 1보다 클 경우에만 그렇게 하라는 것입니다. 현재 레코드의 위치가 맨 처음(1) 레코드이면 그

로 두라는 뜻입니다.

⑥은 [>>] 단추를 눌렀을 때 현재 레코드보다 뒷쪽의 레코드를 표시하라는 것입니다.

단 현재 레코드의 위치(iCurRec)가 최종 레코드의 위치(iNumOfRec)보다 작을 경우에만 그렇게 하라는 것입니다.

만약 지난 시간의 내용을 이해하셨다면 이번 시간이 그리 어렵지는 않을 것입니다.

그러나 파일의 입출력과 관련하여 프로그래밍 경험이 없을 경우에는 개념적으로 이해되지 않는 부분이 많아 선뜻 이해하기 쉽지

않을 수 있습니다.

방법은 반복 학습밖에 없습니다.

몇 번 비슷한 예제를 만들고 실행하다보면 어느새 그 개념을 깨치게 되는 것이죠.

삼일절입니다.

행복한 하루 되시고요...

이상 동주아빠 손병목이었습니다.

27. 배포용 설치 프로그램 만들기

Page 85: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

VB 에서는 매우 쉽게 설치 프로그램을 만들 수 있습니다.

아주 간단한 프로그램이지만 그래도 누군가에게 배포하기 위해 줄 때는 Setup.exe 파일이 포함된 설치 프로그램 형태로 줘야 폼

(?)이 나지 않을까요?

그리고 상 방의 컴퓨터에 관련 DLL 파일이 모두 있다는 보장도 없구요.

무슨 말이냐면, VB 로 만든 프로그램을 실행하기 위해서는 관련 DLL 파일이 필요합니다. 지난 시간에 실습한 랜덤 파일 실습 프

로그램도 실행 파일만 있다고 실행되지는 않습니다.

프로그램이 실행되는 PC 에 Comcat.dll, Msvbvm60.dll, olepro32.dll, Vb6ko.dll 외에도 여러 개의 DLL 파일이 있어야 실행되는

것입니다.

이런 파일들을 모두 찾아서 배포용 디스켓이나 CD 에 담는다는 것은 매우 힘든 일입니다.

이럴 때 VB 에서는 '패키지 및 배포 마법사'를 사용해 손쉽게 설치 프로그램을 만들 수 있습니다.

지난 시간에 실습한 랜덤 파일 실습 프로그램의 배포용 설치 프로그램을 만드는 실습을 하겠습니다.

1. 지난 시간에 실습한 소스 파일을 불러 오세요.(소스 파일은 프로그래밍 소스 자료실에 있습니다.)

그리고 프로젝트 이름을 '랜덤 파일'로 바꿉니다.

그냥 Project1 이라고 두면 나중에 프로그램이 설치된 다음 Project1 이라는 이름이 생깁니다.

2. 설치 프로그램을 만들려면 우선 실행 파일이 필요하겠죠. 실습 파일 만들기는 예전에 시계 프로그램 만들 때 이미 해 본

바가 있습니다.

85

Page 86: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

다음과 같이 파일 메뉴에서 실행 파일을 만드세요.

3. 이제 '패키지 및 배포 마법사'를 실행해야겠습니다.

[추가 기능]-[패키지 및 배포 마법사]를 실행하세요.

만약 [패키지 및 배포 마법사]가 없다면 [추가 기능]-[추가 기능 관리자]를 실행해서 다음과 같이 '패키지 및 배포 마

법사'를 선택하고 '로드/언로드','시작할 때 로드'를 모두 체크 표시하고 [확인]을 누르세요.

다시 [추가 기능] 메뉴를 보면 [패키지 및 배포 마법사]가 보입니다. 실행을 하세요.

86

Page 87: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

4. [패키지 및 배포 마법사] 화 상자에서 '패키지' 아이콘을 선택합니다.

5. 다음과 같은 메시지가 나오면 그냥 [예] 버튼을 누르세요.

6. 이후 화면부터는 계속 [다음] 버튼만 누르면 됩니다.

o '패키지 형식'을 묻는 화면이 나오면 '표준 설치 패키지'가 선택된 상태에서 [다음] 버튼을 누르고

o '패키지 폴더'를 선택하는 화면이 나오면 기본으로 제시한 폴더나 다른 폴더를 선택한 다음 [다음] 버튼을 누르

o '포함된 파일'을 선택하는 화면이 나오면 그냥 [다음] 버튼을 누릅니다.

만약 배포할 프로그램에 Readme.txt 나 기타 추가로 필요한 파일이 있으면 이 단계에서 [추가] 버튼을 눌러 추

가할 수 있습니다.

위 그림에서 보이듯이 배포용 설치 프로그램 여러 개의 파일이 필요하다는 것을 알 수 있습니다.

o 'Cab' 옵션 화면에서는 그냥 '단일 Cab 파일'이 선택된 상태에서 [다음]을 누릅니다.

o '설치 제목' 화면에서는 설치 프로그램으로 설치할 때 나타나는 제목을 입력합니다.

여기서는 '랜덤 파일 설치 실습'이라고 적어 보겠습니다.

o '시작 메뉴 항목' 화면도 그냥 [다음]을 누릅니다. 시작 메뉴에서 어느 곳에 위치하는지 확인하시고...

o '설치 위치' 화면에서도 그냥 [다음]을 누릅니다. 기본 지정된 위치가 왠지 오류도 없고 안심이 될 것 같으니

까...

87

Page 88: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o '공유 파일' 화면에서도 [다음]을 눌러 넘어가세요. 공유 파일은 두 개 이상의 프로그램에서 함께 사용할 파일

을 선택하는 것입니다.

o 마지막으로 완료 화면에서는 그냥 [마침]을 눌러도 되고 '스크립트 이름'란에 적당한 이름을 입력해도 됩니다.

7. 설치 프로그램을 완성하면 해당 폴더에 다음과 같은 파일이 보입니다.

Support 폴더도 꼭 필요합니다. Support 폴더에는 각종 DLL 파일이 저장되어 있습니다.

위 그림에서 보이는 파일 중 Setup.lst 파일을 메모장에서 한번 열어보세요.

주~욱 훑어 보면 아시겠지만 배포용 설치 프로그램에 필요한 파일과 위치 등에 한 정보가 기록되어 있습니다.

8. 그럼 마지막으로 Setup 파일을 실행하여 프로그램을 직접 설치해 보세요.

그리고 지울 때는.... 제어판의 '프로그램 추가 제거'를 이용하면 됩니다.

VB에서 제공하는 배포용 설치 프로그램 마법사는 매우 훌륭합니다.

그러나 전문가들은 VB에서 자체 제공하는 설치 프로그램 마법사가 아닌 다른 설치 프로그램 툴을 이용하는 경우가 많습니다.

VB에서 제공하는 설치 프로그램 마법사로 만든 설치 프로그램의 덩치가 크고 실제 설치 속도가 느리다는 이유 때문이죠.

28. VB와 데이터베이스 - JET와 데이터 컨트롤

VB 처럼 쉽고 강력하게 데이터베이스와 연동할 수 있는 프로그래밍 언어도 없을 것입니다. 물론 쉽다는 것에 더욱 강점을 두어

야겠죠.

1. 데이터베이스

VB 와 데이터베이스를 연동하는 실습을 하기 전에 데이터베이스에 해 조금 알고 넘어가야겠죠?

그러나 데이터베이스에 한 개념 설명은 생략하겠습니다.

마침 데이터베이스 기초 강좌가 별도로 있으니 오라클(데이터베이스) 입문 초기 강좌에서 비교적 자세히 다루고 있습니

다.

그래서 데이터베이스, 관계형 데이터베이스, 테이블, 필드, 레코드에 한 개념 설명은 생략하겠습니다.

2. JET

JET 는 Joint Engine Technology 의 약자입니다. 마이크로소프트는 가끔 이렇게 이해안되는 이름을 짓더라구요. 아마도

제트기할 때의 jet 와 비슷한 의미로 강력하다는 것을 강조하기 위해서 만든 이름이 아닐까하는 생각이 드네요.

88

Page 89: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

JET 는 마이크로소프트 오피스와 비주얼베이직 등에 의해 사용되는 데이터베이스 엔진을 말합니다. 왠 엔진?

엔진은 "핵심적이고 본질적인 기능을 수행하는" 프로그램이라는 뜻을 가지고 있습니다. 즉 기계적인 엔진에 필적할만한

역할을 하는 프로그램이라고 보면 되죠.

결국 JET 는 마이크로소프트에서 사용하는 데이터베이스의 핵심 기술이라고 보면 되겠네요. 그럼 마이크로소프트에서 사

용하는 데이터베이스가 무엇일까요? 흔히 액세스 파일이라고 불리우는 확장자가 mdb 인 데이터베이스를 말합니다. MS

액세스로 데이터베이스를 만들면 확장자가 mdb 가 됩니다. 다른 데이터베이스와의 차이점이라면 모든 데이터베이스 개

체들을 mdb 라는 확장자를 갖는 단일 파일 내에 저장한다는 것입니다.

MS 액세스 실행 화면

그럼 왜 JET 를 사용하는가?

조금 전에 JET 가 데이터베이스의 핵심 기술이라고 했죠? 그러니까 데이터베이스를 다루는 왠만한 것은 JET 가 다 수행

할 수 있다는 말이 됩니다. 그럼 VB 는 뭘하죠?

VB 는 JET 에게 명령만 합니다. 예를 들어 VB 프로그램에서 JET 에게 데이터베이스의 어떤 레코드를 삭제하라고 명령만

합니다.(삭제할 때는 delete 메소드를 사용합니다.) 그러면 JET 가 실제로 레코드를 삭제하는 것이죠. VB 는 데이터베이

스의 레코드를 어떻게 삭제하고 추가하고 갱신하는지에 해 자세하게 처리할 필요는 없습니다. 그냥 JET 에게 명령만

내리는 거죠.

3. 데이터 컨트롤

폼에 데이터 컨트롤을 추가하면 수평 스크롤바 같은 것이 생깁니다.

89

Page 90: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

데이터 컨트롤을 추가함으로써 해당 프로그램에서는 JET 를 사용할 수 있게 되는 것입니다. 이 데이터 컨트롤은 데이터

베이스 파일(*.mdb)과 VB 프로그램을 연결시켜주는 역할을 합니다.

데이터 컨트롤의 왼쪽 또는 오른쪽 화살표를 클릭하면 이 데이터 컨트롤과 연결된 데이터베이스의 전·후 레코드로 이동

하게 해줍니다.

데이터 컨트롤은 폼 위에 추가하여 컨트롤이 보이는 상태에서 사용할 수도 있고, 예전에 시계 프로그램 만들 때처럼 컨

트롤은 추가했지만 실제로 보이지 않은 상태에서 그 기능만 이용할 수도 있습니다.

그 외에도 바운드 컨트롤이나 레코드 세트 객체 등의 개념에 해 이해하는 것이 좋으나 설명이 길어지면 오히려 헤깔

릴 것 같습니다.

이 강좌는 어디까지나 비주얼베이직의 여러 기능을 한번씩 훑어보는 데 그 목적이 있습니다. "아하~ 이런 것도 할 수 있

구나"하는 것만 느끼시면 됩니다. 보다 구체적이고 체계적인 학습을 위해서는 별도의 참고 서적이 필요할 것입니다.

29. DB연동프로그램 실습(1/7) - MDB 파일 만들기

이번 시간에는 데이터 컨트롤을 이용한 데이터베이스 연동 프로그램을 만들어 보겠습니다. 그런데 데이터베이스 연동 프로그램을

만들려면 먼저 데이터베이스가 있어야겠죠.

VB 에서는 '비주얼 데이터 관리자'라는 것으로 직접 데이터베이스 파일(*.mdb)을 만들거나 구조를 변경할 수 있습니다.

따라서 이번 시간에는 먼저 비주얼 데이터 관리자를 이용해 데이터베이스 파일을 만들어 보기로 하겠습니다.

비주얼 데이터 관리자로 간단하게 mdb 파일을 만들 수 있지만 실전에서는 MS 액세스를 이용하는 경우가 많습니다. 아무렴 전

문 데이터베이스 관리 프로그램이 훨씬 편리하지 않을까요.

그러나 이번 실습에서는 철저하게 VB 만을 이용하여 데이터베이스를 만들고, 이와 연동하여 작동하는 프로그램을 만들어 보겠습

니다.

우리가 최종적으로 만들 프로그램의 모습은 이러합니다.

다음과 같이 사번, 성명, 직위, 부서, 토익 필드로 이루어진 데이터베이스에 직접 데이터를 추가하거나 삭제, 검색할 수 있습니다.

[그림 1]

[검색] 버튼을 누르면 사번을 입력하여 해당 레코드를 찾는 기능이 구현되고,

90

Page 91: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

[그림 2]

[그림 1]에서 [SQL 실행] 단추를 누르면 직접 SQL 문장을 입력해서 원하는 레코드를 조회할 수 있도록 하는 것입니다.

[그림 3]

위의 예제에는 JET 를 이용한 데이터베이스 연동의 기본 개념과 방법이 모두 포함되어 있습니다.

지금까지와의 실습 프로그램과는 다르게 매우 어렵게 느껴질지도 모르겠으나 VB 에서는 비교적 간단하게 이 모든 기능을 구현할

수 있습니다.

1. 먼저 다음과 같은 구조의 데이터베이스를 만들기 위해 VB 의 [추가 기능] 메뉴에서 [비주얼 데이터 관리자]를 실행합니

다.

[그림 4] employee 테이블 구조

[그림 5]

91

Page 92: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

2. [파일]-[새 파일]-[Microsoft Access]-[Version 7.0 MDB]를 선택합니다.

[그림 6]

3. 원하는 위치에 원하는 파일명을 입력합니다.

이 실습에서는 C 드라이브의 db1 폴더에 db1.mdb 라는 파일명으로 만들었습니다.

[그림 7]

4. 그림과 같이 Properties 를 마우스 오른쪽 단추로 눌러 나타나는 팝업 메뉴에서 [새 테이블]을 클릭합니다.

[그림 8]

5. 테이블 이름 입력란에 'employee'를 입력하고 [필드 추가] 단추를 클릭합니다.

[그림 9]

92

Page 93: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

6. 이름 입력란에 'number'를 입력하고 형식은 'Text', 크기는 '4'를 입력한 다음 [확인] 단추를 누릅니다.

[그림 10]

7. 위와 같은 방식으로 name, class, position, toeic 필드를 추가합니다.

[그림 11]

형식과 크기는 [그림 4]를 참조하세요.

30. DB연동프로그램 실습(2/7) - 데이터컨트롤을 사용하여 VB 연동

지난 시간에 만든 db1.mdb 파일을 VB 에 연결하는 실습을 하겠습니다.

mdb 파일을 VB 와 연동하기 위해서는 Data 컨트롤을 사용합니다. Data 컨트롤은 [그림 1]에서 붉은 색 박스로 표시한 것입니다.

Data 컨트롤을 폼 위에 올려 놓으면 [그림 1]과 같이 DB 의 레코드를 앞뒤로 이동할 수 있는 컨트롤 이 나타납니다. 이 컨트롤

을 지난 시간에 만든 db1.mdb 파일과 연결하면 됩니다.

93

Page 94: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. 먼저 아래 [그림 1]과 같은 폼을 만들어 봅시다.

[그림 1]

2. 각각의 컨트롤에 다음과 같은 속성을 부여합니다.

여기서 주의해야할 것은 바로 Data 컨트롤입니다.

Data 컨트롤의 여러 속성 중에서 위의 표에서 굵게 표시한 속성들의 값을 정확하게 지정해주어야 합니다.

o Connect 속성에는 Access 를 선택해야 합니다.

이 외에도 FoxPro, dBase, Excel 등 여러 데이터베이스 파일을 사용할 수 있습니다만 지난 시간에 비주얼데이

터관리자로 만든 db1.mdb 파일은 액세스 파일이므로 반드시 Access 로 지정을 해야겠죠.

o DababaseName 속성에는 mdb 파일의 위치를 정확하게 지정해 줘야 합니다.

직접 입력해도 되지만 오른쪽의 [...]버튼을 클릭해서 직접 지정해 주면 됩니다.

o DefaultType 속성은 Jet 를 선택합니다.

Jet 에 해서는 지난 시간에 다루었으므로 설명은 생략합니다. Jet 외에도 ODBC 를 사용할 수 있는데, ODBC

는 이 강좌에서 다루지 않습니다.

o RecordsetType 는 다이너셋으로 지정합니다.

다이너셋 외에도 ‘테이블’, ‘스냅샷’ 등이 있습니다. 일반적으로 다이너셋을 가장 많이 사용합니다. ‘스냅샷’은 데

이터의 추가․수정 등이 불가능하고(단지 조회만 합니다), ‘테이블’은 하나의 테이블을 사용할 때는 유용하지만

SQL 문을 사용할 수 없어 다소 제약이 따릅니다.

94

Page 95: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

o RecordSource 속성은 선택한 DB 파일에서 사용할 테이블 이름을 지정합니다.

지난 시간에 테이블 이름을 employee 라고 지정했으므로 이곳에도 역시 employee 라고 입력하면 됩니다.

3. 데이터 컨트롤이 정확하게 연결되었다면,

아래와 같이 TextBox 컨트롤의 DataField 속성값을 employee 테이블의 각각의 필드 이름과 동일하게 지정해 주어야 합

니다.

그래야 폼을 실행할 때 해당 텍스트 박스에 employee 테이블의 값이 표시됩니다.

이상으로 db1.mdb 데이터베이스 파일과 VB가 연결되었습니다.

다음 시간에는 위 [그림1]의 검색 단추를 클릭했을 때 보일 폼을 디자인합니다. 그런 다음 SQL 실행 단추를 클릭했을 때 보일

폼도 디자인합니다.

이렇게 세 개의 폼을 모두 만든 다음 본격적인 코딩에 들어갈 것입니다.

31. DB연동프로그램 실습(3/7) - 검색 폼 만들기

이번 시간에 만들 폼은 지난 시간에 만든 것과 거의 유사합니다. 지난 시간에 폼을 제 로 만들었다면 이번 실습은 매우 쉽게 처

리할 수 있을 것입니다.

95

Page 96: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. 먼저 아래 [그림 1]과 같은 모양으로 컨트롤을 배치합니다.

2. 각각의 컨트롤에 다음과 같은 속성을 부여합니다.

지난 시간과 동일하니까 어렵지는 않죠?

3. 위의 설정이 제 로 되었다면 아래와 같이 TextBox 컨트롤의 DataField 속성값을 employee 테이블의 각각의 필드 이름

과 동일하게 지정해 주어야 합니다.(이것 역시 지난 시간의 내용과 동일합니다.)

96

Page 97: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

그래야 폼을 실행할 때 해당 텍스트 박스에 employee 테이블의 값이 표시됩니다.

이제 frmDb1S 폼도 db1.mdb 데이터베이스 파일과 연결되었습니다. 데이터베이스 연동 실습과 관련한 세 개의 폼 중에서 두 개

를 만들었습니다.

다음 시간에는 마지막으로 SQL 검색 폼을 만들어 보겠습니다.

32. DB연동프로그램 실습(4/7) - SQL 실행 폼 만들기

이제 마지막 폼을 만들 차례네요.

SQL 문장을 직접 입력하고 실행 버튼을 누르면 SQL 문장이 실행되면서 그리드에 결과가 표시되는 폼입니다.

97

Page 98: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

1. 먼저 아래 [그림 1]과 같은 모양으로 컨트롤을 배치합니다.

2. 각각의 컨트롤에 다음과 같은 속성을 부여합니다.

주의해야 할 것은 반드시 먼저 Data 컨트롤의 속성을 설정하고 난 다음에 MSFlexGrid 의 속성을 설정해야 한다는 것입

니다.

만약 Data 컨트롤의 DatabaseName 과 RecordSource 속성을 정확하게 지정하지 않으면 MSFlexGrid 컨트롤의

DataSource 속성값을 datDb1 으로 지정할 수 없게 됩니다.

이로서 VB의 데이터베이스 연동 실습을 위한 껍데기는 다 만들었습니다.

다음 시간부터는 레코드의 추가, 삭제, 수정, 검색 및 SQL 문장 실행 등을 위한 본격적인 코딩 작업에 들어가겠습니다.

이런~ 위의 Form 이름이 잘못되었네요.

폼 이름을 frmSqlSearch로 바꿔주세요.(frmDb1S는 31강에서 만든 폼의 이름과 동일하네요..)

98

Page 99: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

33. DB연동프로그램 실습(5/7) - 코딩(1)

지난 시간까지 프로그램에 필요한 껍데기(폼)는 모두 만들었으니 이제 본격적인 프로그래밍에

돌입하겠습니다.

먼저 첫 번째 폼인 frmDb1 폼을 열고 코드 창에서 아래와 같은 코드를 입력하면 됩니다.

아래는 코드를 부분별로 설명하고 있으니 전체적인 코드를 확인하시려면 자료실의 소스 파일을

참조하시기 바랍니다.

조금 어려울 수도 있습니다. 그리고 설명이 많이 부족할 수도 있습니다.

그러나 비주얼베이직을 제 로 공부하려는 분이라면 지금쯤 약간은 도톰한 VB 책 한권씩은 사 두셨겠죠?

[1]

Private Sub Form_Load()

datDb1.DatabaseName = App.Path + "₩db1.mdb"

datDb1.RecordSource = "employee"

datDb1.Refresh

If datDb1.Recordset.RecordCount = 0 Then

Call TextUnabled

End If

End Sub

Form 개체의 Load 이벤트에 위와 같은 코드를 추가합니다. 한줄한줄 설명드리자면,

• 데이터 컨트롤(datDb1)의 DatabaseName 속성값을 현재 프로그램이 실행되고있는 경로(App.Path)의 db1.mdb 파일로

지정하고

• 데이터 컨트롤(datDb1)의 RecordSource 속성값을 "employee"로 지정한 다음

• 데이터 컨트롤(datDb1)을 새로고침(Refresh)합니다.

• 레코드셋의 레코드가 없으면 TextUnabled 함수를 실행합니다.

이 프로그램에서는 TextUnabled(), TextEnabled() 와 같은 사용자가 직접 만든 함수를 사용합니다.

TextEnabled()는 텍스트 박스를 모두 입력할 수 있는 상태로 만들고, TextUnabled()는 텍스트 박스에 입력할 수 없도록 만드는

함수입니다.(아래 [2]와 [3]의 함수입니다.) 따라서 위의 If~End If 는 데이터가 하나도 없으면 [추가] 단추를 누르기 전까지 데

이터를 입력할 수 없도록 만드는 기능입니다.

[2]

Private Sub TextEnabled()

txtNumber.Enabled = True

txtName.Enabled = True

txtClass.Enabled = True

txtPosition.Enabled = True

99

Page 100: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

txtToeic.Enabled = True

End Sub

사용자 정의 함수입니다. 코드 창에서 함수 이름부터 모두 직접 입력해야 됩니다.

텍스트 박스 5 개를 모두 입력할 수 있는 상태로 만들어 주는 기능을 합니다.

[3]

Private Sub TextUnabled()

txtNumber.Enabled = False

txtName.Enabled = False

txtClass.Enabled = False

txtPosition.Enabled = False

txtToeic.Enabled = False

End Sub

사용자 정의 함수입니다.

텍스트 박스 5 개 모두 입력할 수 없는 상태로 만듭니다. 예를 들어 [추가] 단추를 누르지 않은 상태에서는 텍스트 박스에 아무

런 데이터도 입력하지 못하도록 할 때 사용합니다.

[4]

Private Sub cmdAdd_Click()

datDb1.Recordset.AddNew

Call TextEnabled

txtNumber.SetFocus

End Sub

[추가] 단추를 눌렀을 때 사용되는 코드입니다. cmdAdd 컨트롤의 Click 이벤트에 위와 같은 코드를 추가합니다.

• 첫 번째 줄은 현재의 데이터베이스의 레크드셋에 새 데이터를 추가하는 메소드(AddNew)

• 두 번째 줄은 텍스트 박스에 모두 입력할 수 있는 상태로 만드는 것

• 마지막 줄은 번호 입력란(첫번째 텍스트 박스)로 커서를 위치시키는 기능

입니다.

[5]

Private Sub cmdDelete_Click()

If datDb1.Recordset.RecordCount > 0 Then

datDb1.Recordset.Delete

datDb1.Refresh

Else

Call TextUnabled

End If

End Sub

[삭제] 단추를 눌렀을 때 사용되는 코드입니다. cmdDelete 컨트롤의 Click 이벤트에 위와 같은 코드를 추가합니다.

만약 레코드가 하나라도 있으면(즉, RecordCount가 0보다 크면) 현재의 레코드를 삭제(Delete)하고 새로고침(Refresh)합니다.

100

Page 101: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

그렇지 않으면(레코드가 하나도 없으면) 텍스트 박스를 입력하지 못하도록 만듭니다.

[6]

Private Sub cmdSearch_Click()

frmDb1S.Show

End Sub

[검색] 단추를 눌렀을 때 사용되는 코드입니다. cmdSearch 컨트롤의 Click 이벤트에 위와 같은 코드를 추가합니다.

frmDb1S 폼을 보여주는 기능입니다.

[7]

Private Sub cmdSQL_Click()

frmSqlSearch.Show

End Sub

위와 마찬가지로 [SQL 실행] 단추를 눌렀을 때 frmSqlSearch 폼을 보여주는 기능입니다.

[8]

Private Sub datDb1_Reposition()

datDb1.Caption = CStr(datDb1.Recordset.AbsolutePosition + 1) + "/" + CStr(datDb1.Recordset.RecordCount)

End Sub

datDb1 컨트롤의 Reposition 이벤트에 추가하는 코드입니다.(데이터컨트롤을 더블클릭하고 위의 코드를 추가해도 됩니다.)

데이터컨트롤의 캡션 속성값(datDb1.Caption)을 레코드셋의 현재 위치(datDb1.Recordset.AbsolutePosition)에 1을 더한 숫자를

문자열로 바꾸고(CStr), 레코드셋의 전체 개수(datDb1.Recordset.RecordCount)를 문자열로 바꾸어(Cstr) 현재위치/전체숫자와 같

은 식으로 표시하라는 뜻입니다.

34. DB연동프로그램 실습(6/7) - 코딩(2)

먼저 31강에서 만들었던 두 번째 폼인 frmDb1S 폼을 열고 코드 창에서 아래와 같은 코드를 입력하면 됩니다.

101

Page 102: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

[1]

Form 개체의 Activate 프로시저를 선택하고 txtSearchNum.SetFocus를 입력합니다.

Activate 프로시저에는 창이 활성화될 때 실행되는 코드를 입력합니다.

따라서 위와 같이 하면 frmDb1S 창이 활성화되면 검색을 위해 사번을 입력하는 txtSearchNum 텍스트 박스에 커서가 깜빡거리

게 됩니다.

[2]

창이 로드될 때 실행되는 코드입니다.

지난 시간의 코드와 비슷합니다.

현재 경로에서 db1.mdb 파일을 데이터컨트롤(datDb1)과 연결시킵니다. 그리고 db1.mdb의 employee 테이블에서 레코드를 가

져옵니다. 그리고 새로고침을 합니다.

그 외의 코드는 검색을 위한 사번 입력란을 제외한 다른 입력 란을 모두 비활성화시키는 기능을 합니다. 검색 결과를 보여주기만

하면 되니까 입력할 수 없도록 만든 것입니다.

[3]

찾아랏! 단추를 누를 때 실행되는 코드입니다.

FindFirst 메소드는 레코드셋에 있는 레코드를 처음부터 검색하여 해당 조건을 만족하는 처음 레코드를 찾아줍니다.

FindFirst 메소드 뒤의 조건식은 큰 따옴표로 둘러싸야 합니다.

예를 들어, Data1.RecordSet.FindFirst "점수 Between 90 And 100"는 점수가 90~100인 자료 검색하라는 뜻이 됩니다.

따라서 만약 사번 입력란에 0003을 입력하고 [찾아랏!] 단추를 누르면

datDb1.RecoredSet.FindFirst "[number]= '0003‘" 과 같은 식이 실행됩니다.

지난 시간의 실습을 무난히 마쳤다면 이번 시간은 그리 어렵지 않았을 것입니다.

35. DB연동프로그램 실습(7/7) - 코딩(3)

오늘은 VB와 DB 연동 마지막 시간입니다.

VB와 DB 연동 방법은 이 강좌에서 소개하고 있는 Data 컨트롤을 이용한 방법만 있는 것은 아닙니다. 이건 아주 기초적인 것이

며 실전 프로그래밍에 거의 사용되지 않을 수도 있습니다. 비록 소스는 쉽고 빠르게 작성할 수 있을지 모르겠지만 사용자가(또는

프로그래머가) 원하는 정도의 세부적이고 다양한 기능을 구현하기에는 부적합하기 때문입니다.

102

Page 103: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

오히려 실무에서는 DAO(Data Access Object)를 이용하여 데이터베이스를 직접 생성하거나 보다 섬세한 컨트롤을 합니다. ODBC

를 이용하여 오라클 DB를 직접 액세스하여 사용하기도 합니다.

지금까지의 강좌는 어디까지나 프로그래밍의 개념을 익히는 입문 수준이라는 것을 다시 말씀드리며, 보다 체계적인 학습을 위해

서는 관련 서적 또는 프로그래밍 전문 사이트를 통해 심화된 학습이 필요합니다.

강좌를 마무리하려다보니 서론이 길어졌네요.

그럼 이제 마지막 폼에 코딩을 하는 것으로 DB 연동 실습을 마치도록 하겠습니다.

먼저 32 강에서 만들었던 세 번째 폼인 frmSqlSearch 폼을 열고 코드 창에서 아래와 같은 코드를 입력하면 됩니다.

매우 간단합니다.

[1]

창이 로드될 때 실행되는 코드입니다.

지난 시간의 코드와 다르지 않죠?

현재 경로에서 db1.mdb 파일을 데이터컨트롤(datDb1)과 연결시킵니다. 그리고 db1.mdb의 employee 테이블에서 레코드를 가

져옵니다. 그리고 새로고침하는 역할을 합니다.

[2]

[1]에서 RecordSource 속성에 “employee"라는 테이블명을 입했습니다.

그런데 [2]의 RecordSource 속성에 txtSQL.Text 값을 넣었습니다. 다시말해 텍스트 박스에서 입력한 내용을 RecordSource 속

성값으로 설정한 거죠.

이렇게 되면 텍스트 박스에 입력한 SQL 문장이 실행되는 결과가 나타납니다.

그렇게 된 결과를 다시 보기 위해 아래 줄에서 Refresh를 한 겁니다.

쉽죠?

단, SQL이 뭔지 전혀 모르시는 분들은 좀처럼 이해가지 않을 수 있습니다.

SQL에 해서는 본 사이트의 오라클입문강좌에서 자세하게 다루고 있습니다. 특히 개념은 오라클강좌 제 19 강 SQL과 SQL*Plus

에서 소개하고 있습니다.

103

Page 104: Visual Basic 6 - cau.ac.krcau.ac.kr/~orist/2005_2/VB/vb.pdf · 것만 알아두시면 됩니다. 비주얼베이직으로 프로그래밍을 여러번 하다가 보면 자연스레

프로그램이 모두 완성되었으면 직접 데이터를 입력, 수정, 삭제를 해보시기 바랍니다.

그러고 입력된 자료를 바탕으로 SQL 검색도 해보실 수 있습니다.

예를 들어 SQL 문장 입력 텍스트 박스에 다음과 같이 입력하여 실행해 보세요.

• select * from employee

• select number from employee

• select number, name from employee

• select * from employee where toeic > 700

• select * from employee where position = "사원“

104