▲TOP

비주얼 베이직에서 사용되는 각종 명령으로 구성되어 있습니다.
아이콘으로 표시되는 도구들도 메뉴 바에서 결정하는 것으로 풀다운 메뉴방식에 의해 이루어져 있으며
작업을 지시할 수 있는 기능 항목이 나열된 곳이다.
 

▲TOP

하나의 폼을 구성하기 위한 텍스트 박스, 명령버튼, 이미지 등의 각종 컨트롤이 모여있다.
종류는 아래와 같다.
***컨트롤의 종류***
비주얼 베이직의 컨트롤은 세가지로 분류된다.
첫째는 툴박스에 나타나 있는 기본(COSTOM)컨트롤이며, 두번째는 메뉴 (프로젝트-구성요소-컨트롤)를 선택해 고를 수 있는 ActiveX 컨트롤이다.  마지막으로 사용자 스스로가 작성할 수 있는 사용자 정의 컨트롤이 있다.
컨트롤의 확장자는 .ocx, .dll 이며 이 세가지는 차이는 별로 없다.

1) 기본 컨트롤
많이 사용되는 컨트롤을 디폴트로 툴박스에 포함시켜 놓은 컨트롤들

2) Active 컨트롤
비주얼 베이직이 제공하는 기능이 더 다채롭게 확장된 컨트롤들

3) 사용자 정의 컨트롤
기존의 컨트롤들을 이용해 새롭게 재구성하여 그 기능을 특화한 사용자 정의 컨트롤

***컨트롤 선택***
툴박스의 컨트롤을 더블클릭 하거나 선택 후 폼위로 마우스를 옮긴 후 드래그 하면 폼위에 컨트롤이 생긴다.

위치나 크기는 마우스로 조작 가능하다.

 
***기본컨트롤의 속성과 메소드***
 여기서는 기본컨트롤의 속성과 메소드에 대해서 설명할 것이다. 그러나 VB5, VB6에서는 기본컨트롤의 기능이 엄청나게 강화되었기 때문에, 그것에 맞추어 속성과 메소드의 개수도 늘어났고, 따라서 이 속성과 메소드들을 다 설명하기는 어렵다. 따라서 각 컨트롤의 특성을 보여주는 특징적인 것과 기본적으로 알아야 할 것들만 설명하도록 한다.
 
* PictureBox/Image(그림박스/이미지)
 두 객체는 서로 비슷한 것 같지만 상당히 다르다. 일단 PictureBox는 컨테이너이다. 그래서 여러 가지 객체를 위에 얹을 수 있는 반면 Image는 컨테이너가 될 수 없다. 또한 PictureBox의 경우 hDC를 갖기 때문에 Circle이나 Line등의 메소드로 위에 직접 그래픽을 그리는 것이 가능하지만 Image는 이것 역시 불가능하다.
PictureBox는 위에 얹힌 그림을 확대하거나 축소할 수 없다. 그러나 Image는 Stretch속성을 True로 함으로써 얹혀진 그림을 Image의 크기에 맞게 조절할 수가 있다.
 
* AutoSize(PictureBox)
 그림을 읽었을 때 그 그림의 크기에 맞추어 PictureBox의 크기가 조절되는 가에 관한 속성으로, 만약 True로 되어있으면 그림이 읽혀질 때 크기가 조절된다. 그러나 False로 되어 있다면 크기는 변하지 않고, 남는 부분은 Backcolor색으로 칠해지며, 그림이 PictureBox보다 크다면 남는 부분은 잘리게 된다.
 
* BackColor(PictureBox)
 객체의 배경색을 칠한다.
 
* BorderStyle(PictureBox, Image)
 폼에서와는 의미가 다르게, 객체의 경계선이 있는가 없는가를 나타내는 속성으로, 0이면 경계선은 나타나지 않고, 1이면 단선이 나타난다. 이 속성은 Appearance속성과 같이 생각해야 경계선의 진짜 모양을 알 수 있다. 만약 Appearance가 0-평면이라면 경계선은 정말로 한 줄짜리 선으로만 나타난다. 그러나 1-3D라면 경계선은 한 줄이 아니라 3차원적 입체모양을 나타내는 선으로 그려지게 된다.
 
*Stretch(Image)
 읽어들인 그림을 객체에 맞게 크기 조절을 할 것인지를 결정하는 속성이다.
 
*Label(레이블)
 이 컨트롤은 사용자에게 보여줄 문장을 화면에 나타내는 역할을 한다.
 
* Caption
 Form에서는 캡션바에 보여지는 문장을 바꾸는 속성이었지만 Label에서는 레이블 전체에 보여지는 문장을 결정하는 속성이다.
 
* Alignment
 Label의 크기에 비해서 나타난 문장이 작다면, Alignment값에 따라 문장을 정렬한다. 좌, 우, 가운데의 세가지 값이 있고, 디폴트(초기값)으로
좌측정렬이 선택되어 있다.
 
* AutoSize
 Label에 나타나는 문장의 크기에 따라서 Label의 크기를 자동적으로 변경할 것인가의 여부를 결정하는 속성으로 이 속성이 True로 되어
있으면 WordWrap속성은 True가 될 수 없다.
 
* BackStyle
 Label의 배경이 투명한가 그렇지 않은가의 여부를 결정하는 속성이다.
 
* Font
 이 속성은 글자를 사용하는 모든 객체에서 동일하게 사용되는 것으로, 어떤 폰트를 사용해서 문장을 표시할 것인가를 결정하는 것이다.
 
* WordWrap
 Label에 긴 문장을 표시할 때, 오른쪽 끝까지 간 후 다음줄로 스크롤할 것인가를 결정하는 속성으로 이 속성은 TextBox의 "MultiLine" 속성과 비슷하나, 입력이 되지 않는다는 점이 다르다.
 
*TextBox(텍스트박스)
 이 컨트롤은 사용자로부터 입력을 받아서 이것을 속성으로 기억하는 역할을 한다.
 
* Text
 Label컨트롤의 Caption속성에 대응하는 TextBox컨트롤의 속성이 이것이다. 사용자로부터 입력받은 데이터를 기억하며, 길이는 거의 무제한이라고 보아도 무방하다.
 
* IEMMode
 VB5에서 추가된 속성으로 현재 TextBox의 입력모드를 반환하는 속성이다. 한글윈도우라면 한/영 모드를 토글해서 사용할 수 있다.
 
* Enabled
 객체가 현재 사용가능한 지를 결정하는 속성이다. 대개의 경우 True로 되어 있으나, 만약 False로 한다면 객체의 종류에 따라 여러 가지 효과가
발생한다. 이 TextBox의 경우는 박스안의 글자가 회색으로 변하면서 입력이 불가능해진다.
 
* MaxLength
 박스에 입력 가능한 최대의 글자수를 지정한다. 디폴트는 0으로, 메모리가 허용하는 한 얼마든지 값을 입력할 수 있다.
여기서 주의해야 할 것은 한글과 영문을 똑같이 취급하기 때문에 "비주얼베이직"과 "123456"은 똑같은 여섯자로 인식된다. 실제 메모리상의
분량은  한글이 2배가 되지만 비주얼 베이직에서는 기본적으로 한글, 한자와 영문은 똑같이 취급한다.
 
* PasswordChar
 네트웍에서의 암호나 하이텔, 천리안 등의 통신망에 접속시 암호를 입력할 때, ****** 이런식으로 입력되는 것을 보았을 것이다. TextBox에서
디폴트는 ""이며, 이 경우 TextBox는 암호입력기능을 갖지 않는다. 지정을 하게되면 지정한 문자가 사용자가 입력한 문자대신 화면에 보여진다.
대개의 경우 암호는 "*"로 표시하므로, 암호를 지정하는 텍스트박스라면 "*"로 표시해 준다.
 
* SelLength
 텍스트박스 중에 선택된 부분의 길이를 나타내는 속성으로 만약 선택이 되지 않았다면 0을 돌려준다.
 
* SelStart
 선택된 부분의 시작위치를 나타내는 속성이다.
 
* SelText
 텍스트박스 중에 선택된 부분의 텍스트를 직접 돌려주는 속성이다.
 
* MultiLine
 Label컨트롤의 WordWrap속성에 대응하는 TextBox컨트롤의 속성으로, 이 속성이 True로 되면 여러 줄의 글을 입력할 수 있게 된다.
방명록이나 메모장을 만들기에 알맞다. 그러나 여러 종류의 폰트를 사용하는 워드패드와 같은 프로그램은 TextBox가 아닌 윈도우 공통
컨트롤의 RichTypeText를 써야 한다.
 
*Frame(프레임)
 프레임은 대표적인 컨테이너 객체로서, 여러 객체들을 묶는 것 이외에는 별로 할 일이 없는 객체이다. 그리고 요즘은 다른 객체나 커스텀
컨트롤들이 Frame을 대신하고 있기 때문에 점차 사용이 줄고 있다. 그럼에도 폼을 꾸미는데 많이 사용되고 있는 객체이다.
 
* Container
 자신이 포함된 컨테이너를 오브젝트 변수타입으로 반환한다. 이를테면 프레임안의 텍스트박스는 프레임자체를 Container속성으로 가지고
있다. 이 속성을 바꾸어 줌으로써 컨테이너끼리 객체를 주고받는다던가 하는 재미있는 여러 가지 효과를 낼 수 있다.
 
* Parent
 자신의 모 윈도우를 오브젝트 변수타입으로 반환한다. Container와 혼동하지 말도록 하자. Container는 자신의 컨테이너를 반환하는 것이지만
Parent의 경우는 프레임내에 있는 텍스트박스나 프레임밖에 있는 텍스트박스나 똑같이 프레임을 포함하는 폼을 돌려주게 된다. 컨테이너를
돌려주는 것이 아니다.
 
* CommandButton(명령버튼)
 눌려져서 프로그램에 사용자의 어떤 요구를 전달하는 객체이다. 명령버튼 위에 텍스트뿐만 아니라 그림도 넣을 수가 있다.
 
* Default
 윈도우 프로그램에서 어떤 버튼을 보게 되면 가는 점선이 버튼의 외곽을 둘러싸고 있고 그래서 다른 버튼들보다 좀 더 뚜렷하게 보이는 종류가
있을 것이다. 이 버튼은 디폴트라고 불리는 것으로, 사용자가 마우스로 클릭하지 않고 다만 엔터키를 치게 되면 버튼이 눌린 효과를 낼 수 있는
것이다. Default속성을 True로 하면 이런 효과를 낼 수 있다.
 
* Cancel
 Default와 비슷하나, 엔터키가 아닌 Esc키 입력을 받는 버튼이다.
 
* DisabledPicture
 Enabled = False 일  때 버튼에서 보여줄 그림을 나타낸다.
 
* DownPicture
 버튼이 눌려진 상태에서 버튼에 보여줄 그림을 나타낸다.
 
* Picture
 보통의 상태에 명령버튼 위에 보여질 그림을 나타낸다.(Style속성을 반드시 1로 해야 한다.)
 
* Style
 0-표준과 1-그래픽의 두가지 값이 있다. 만약 버튼에 그래픽을 사용하고 싶다면 반드시 1로 설정해야 한다.
 
* CheckBox(체크박스)
 이것은 어떤 것이 선택되었는가, 그렇지 않은가를 결정하는 컨트롤이다. 0-확인안함(선택되지 않음), 1-확인(선택됨),
2-연회색(선택불가능)의 세가지 값이 있다. 이 값은 밑에 설명하겠지만 Value속성에서 지정한다.
 
* Value
 체크박스에서 가장 중요한 속성이다. 선택여부를 결정하는 0, 1, 2의 값을 보여주며, 이 값에 따라 컨트롤에 체크가 되었다 안되었다 한다.
 
* Caption
 Label의 Caption속성과 똑같다. 여기에 글을 쓰면 체크박스 옆에 글이 나타난다.
 
* OptionButton(옵션버튼)
 옵션버튼은 여러 개 중 한 개를 선택하는 것이다. 그런데 여기서 여러개 중 한 개라는 말은 한 컨테이너 안에서 한 개라는 말이다. 다시 말하자면
하나의 폼에서 옵션버튼만 여러 개 넣은 경우 그 여러 옵션버튼 중 하나를 선택하며, 하나의 폼이라 할 지라도 두 개 이상의 프레임이 있고, 각
각의 프레임 내에 옵션버튼을 여러 개 넣은 경우 한 프레임 내에서 한 개의 옵션버튼을 선택한다.
 
* Value
 체크박스와 마찬가지로 이 속성에서 선택여부를 결정한다. 체크박스와는 다르게 True와 False로 값을 정한다.
 
* Caption
 마찬가지로 CheckBox의 Caption속성과 같다.
 
* ListBox(리스트박스)
 리스트박스 역시 여러개 중에 한 개(혹은 복수개)를 선택한다는 점에서 OptionButton과 유사하다. 그러나 ListBox의 경우는 컨테이너 안에서
선택이 아니라 리스트 박스내에서의 선택이라는 점이 다르다. 이것은 대단히 많이 사용되는 컨트롤이기도 하고 더욱 많이 쓰이는 콤보박스의
원형이기 때문에 중요하게 다루어져야 하는 속성이 상당히 된다.
 
* AddItem
 리스트에 아이템을 하나 더한다.   예) List1.AddItem "Visual Basic"
 
* RemoveItem
 리스트에서 현재 아이템을 삭제한다.
 
* Clear
 리스트의 모든 아이템을 삭제한다.
 
* List
 리스트박스의 아이템을 갖는 List객체 콜렉션을 반환한다.
 
* ListCount
 리스트아이템의 숫자를 반환한다.
 
* ListIndex
 현재 리스트에서 선택된 아이템의 위치를 반환한다. MultiSelect가 True라면 의미가 없는 속성이다.
 
* MultiSelect
 리스트에서 여러 개를 동시에 선택할 수 있는지의 여부를 정한다.
 
* Style
 확인란을 갖는지의 여부를 결정한다.
 
* ComboBox(콤보박스)
 콤보박스는 TextBox와 ListBox를 합쳐 놓은 형태이다. 그래서 옆의 화살표 같은 것을 눌러보면 리스트목록이 나와서 선택이 가능하지만
컴보박스내에 직접 입력하는 것도 가능하다. 이런 콤보박스의 기능은 데이터베이스 등에서 특히 유용한데, 자유롭게 입력하되 가장 많이 쓰이는
예를 몇 개 들어주면서 선택에 도움을 줄 때 사용될 수 있다.
 
* Style
 어떤 형태의 콤보박스인지를 결정한다. 드롭다운(밑으로 리스트박스가 내려지는 것)인가 아니면 Simple(단순한 형태의 콤보박스)인가 또는 드롭다운 리스트인가 이 세가지 형태 중에 결정할 수 있다.
 
* HScrollBar/VScrollBar(수평스크롤바/수직스크롤바)
 이것은 상하, 혹은 좌우로 스크롤을 시키는 것이 이 객체들의 역할이다. 알아둘 것은 MultiLine된 텍스트박스 등은 스스로 스크롤바를 갖는다는
것이다. 이 객체는 스크롤바를 인위적으로 만들어줄 필요가 있을 때 사용한다.
 
* Min/Max
 스크롤바의 최대/최소값을 정의한다.
 
* Value
 스크롤바로 이동하는 값을 가지고 있다.
 
* Timer(타이머)
 이 컨트롤은 일정시간마다 스스로 이벤트를 발생시키므로, 시간을 측정해서 어떤 작업을 하는데 알맞다. 그러나 이 객체는 아주 정밀한 시간
단위로 작업을 하는 경우에는 걸맞지 않다.
 
* Interval
Enabled = True인 경우에 Timer는 일정간격으로 이벤트를 발생시키는데, 그 이벤트의 발생간격을 지정한다. 단위는 1/1000초이다. 즉, Interval의 속성이 1000이면 1초이다.
 
* DriveListBox/DirListBox/FileListBox
 이 컨트롤들은 모두 "파일선택"에 관련되었다는 공통점을 갖는다. 세개다 뒤에 붙은 말에 의해서 알 수 있듯이 "리스트박스"이다.
DriveListBox의 경우는 현재 시스템의 모든 드라이브를 보여준다. DirListBox의 경우는 현재 드라이브의 모든 디렉토리를 보여준다.
FileListBox의 경우는 현재 디렉토리의 모든 파일 목록을 보여준다. 이 세 개의 컨트롤이 별도로 쓰이는 경우는 별로 없고, 대개 세 개를
조합해서 사용하게 되어있다.
 
* Shape(도형)
 일정한 도형을 나타내는 컨트롤인데 정사각형, 직사각형, 원형, 타원형, 모서리 둥근 직사각형이나 정사각형이 지원된다. 특기할 만한 것은 Line과 더불어 유일하게 이벤트를 하나도 갖지 않는 컨트롤이다.
 
* Line(선)
 선을 그리는 컨트롤이다. Left-Top-Width-Height의 네 개 속성을 갖지 않는 대신 X1, X2, Y1, Y2의 네가지 속성으로 선의 양단을 표시하는
두 점을 나타낸다.
 
* DataControl(데이터컨트롤)
 이 컨트롤은 데이터베이스를 쉽게 사용할 수 있도록 마이크로소프트사에서 제공하는 것인데, 이 컨트롤에 대해서는 뒤에 데이터베이스부분
에서 다시 설명한다.
 
* OLE Container Control
 이것 역시 뒤에 OLE부분에서 다루도록 한다.

▲TOP

***폼(form)***
폼에는 폼의 형태 외에도 그 폼을 디자인할 때에 사용한 자원(Resource)들을 포함하고 있으며, 어떤 커스텀 컨트롤을 사용했는가에 대한 정보도 함께 자기고 있다. 뿐만 아니라 폼에 종속된 프로그램의 소스도 역시 포함하고 있으니, 단순히 시각작인 디자인 화면 정도의 수준이 아니라 완전히 하나의 프로그램 모듈인 셈이다. 파일로 저장될 때 .frm 이라는 확장자를 가지게 된다.
 
***모듈(mudule)***
하나의 프로젝트에서 전역적으로 쓰이는 상수, 변수, 프로시저, 함수 등을 모아 놓은 프로그램 모듈이다. 같은 프로그램 모듈이라도 폼과는 달리 자원이나 화면 디자인에 관한 정보는 들어있지 않다. 대신 폼이 지역적인 성격을 띄는 반면, 모듈은 전역적인 성격을 띄기 때문에 모듈에서 선언된 변수들은 다른 모듈, 폼에서 모두 쓰일 수 있다. 파일로 저장될 때 .bas라는 확장자를 가지게 된다.

▲TOP

하나의 프로그램은 하나의 프로젝트와 대응된다. 이 프로젝트는 최소한 하나 이상의 폼 혹은 모듈을 포함한다. 프로젝트에 해당하는 정보는 프로그램의 이름, 아이콘, 처음으로 실행되는 프로그램 모듈, 실행 시 필요한 커스텀 컨트롤의 목록 등이다. 확장자는 .vbp을 갖게 된다.

▲TOP

***프로퍼티(속성)***
프로퍼티란 '속성'을 의미한다. 여기서 한가지 먼저 설명할 것이 있다.  'OOP'에 대한 것인데 'OOP'는 '객체지향 프로그래밍'의 약자이다. OOP의 세계는 객체와 클래스가 주개념으로 취급된다. 객체란 말 그대로 속성과 기능을 갖고 있는 어떤 추상적, 현실적 사물을 말한다.  사람, 차, 컴퓨터 등등.. 여담이지만 서양사람들은 OOP적인 세계관을 갖고 있다고 한다.
예를 들어 버튼이 두 개가 있다고 생각하자.  이들 버튼 중 하나는 '보기'라는 글이 있고, 또 다른 하나에는 '종료'라는 글이 있다.  또, 한 버튼은 빨간색, 다른 버튼은 파란색.... 등 우리가 식별할 수 있는 각 객체들의 특징이 있다.  이런 것들을 객체의 속성(Property)라고 한다.
프로퍼티는 객체가 가질 수 있는 속성이라고 정의할 수 있으며 구체적인 실례로 [컨트롤].[프로퍼티]로 사용 가능하다. 예를 들어보자.
Private Sub Command1_Click()
Text1.Text = "커맨드 버튼을 누르면 텍스트 박스에 이 글자들이 뜹니다"
........
End Sub
 
가정하기로 한다. 현재 폼위에는 커맨드 버튼 컨트롤 한개, 텍스트 박스 컨트롤 한개, 이렇게 두개의 컨트롤이 위치하고 있다. 또한 프로퍼티 윈도우상에 나타나 있는 텍스트 컨트롤의 프로퍼티들 중 Name = "Text1", Text = "Text1"이라고 한다. (처음에 텍스트 컨트롤을 위치시켰을 때 나타난 문자열은 "Text1" 이다. 이는 프로퍼티 윈도우에서 확인할 수 있다.)
 
[결과]
커맨드 버튼을 클릭하면 "커맨드 버튼을 누르면 텍스트 박스에 이 글자들이 뜹니다"라는 문자열이 텍스트 박스에 나타나게 된다.
 
[해석]
텍스트 박스 컨트롤은 툴박스에 위치해 있는 중이다. 그런데 우리는 이 텍스트 박스를 사용하기 위해 하나 끌어다 놓았다. 마치 손도장을 갖고 자기 이름을 찍는 것처럼 말이다. 원판과 복제판의 경우라고 보면 되겠다.
어쨌든 이제 폼위에 놓여있는 텍스트 박스는 특수한 것이 된 상태다. 이것은 하나의 객체로서 재 탄생된 것이다. 객체는 속성, 프로퍼티를 갖고
있다고 말했다. 텍스트 박스 컨트롤이라는 손도장을 보면 나타나는 문자열은 모두 Text라는 프로퍼티에 담겨 져 있는데 우리는 이 프로퍼티에
위 문자열을 새로 넣은 것뿐이다.
 
***속성은 어떻게 변경될 수 있는가?***
프로퍼티는 두가지 방법으로 변경 가능하다. '디자인 모드'와 '실행 모드' 이 두가지 상태에서 변경할 수 있는데, '디자인 모드'에서 바꾼다는 뜻은 '프로퍼티 윈도우'에서 사용자가 직접 값을 넣어준다는 것을 의미하며 '실행모드'는 코드 윈도우에서 사용자가 코딩에 의해 값을 넣어주는 것을 말한다. 컨트롤들은 저마다 프로퍼티를 지니고 있다. 공통되는 속성도 있고 독특한 속성도 있다. 대개는 '디자인 모드'와 '실행 모드'에서 변경 가능하지만 모두가 그런 것은 아니다. ReadOnly 속성을 지닌 프로퍼티는 '디자인 모드' 에서만 가능한데 이런 것들은 '도움말'을 통해 확인 가능하다. 비주얼 베이직에서 쓰이는 도움말을 MSDN이라고 한다. 가능하면 구해서 인스톨 시켜 사용하면 편리하다.  
***코드(CODE)***
코드란 개체의 동적인 부분으로 쉽게 이해할 수 있는 것으로는 기능적인 부분을 말한다. 위와 같은 예로 다시 설명하자면 달린다, 멈춘다, 방향을 바꾼다 등을 말할 수 있다. 코드 창은 초기화면에서 나타나지는 않지만 모든 개체에 마련되어 있다. 코드 창을 여는 것은 원하는 개체를 더블 클릭하는 것으로 이루어진다.

▲TOP

기존의 4.0애서는 없던 기능으로 작업도중에 화면에 실행될 프로그램을 미리 보기를 하는 부분이다. 폼을 디자인할 때와 그 디자인된 폼을 실행시킬 때의 화면에 차이가 있을 경우가 많은데 미리 실행시의 화면을 볼 수 있는 기능으로 화면구성에 많은 도움을 준다.