http://cafe.naver.com/q69/86125

가장 핵심적인 기초사항이므로 주의깊게 공부를 해야 하는 부분이다.


1. 컨트롤


컨트롤을 설명하기 위해선 사실 깊이 들어가야 할것이 많다. 이것은 잘쓰기만 해도 별문제는 없지만
기본원리를 알기 원하는 사람들을 내 능력껏 설명을 해보려 한다. 원리를 설명한후 사용법에 대한
간략한 소개로써 끝마치겠다.


윈도우95/98에는 Windows API라는 것이 제공되어 사용된다. API란 윈도우 함수 집합을 의미하며
비주얼 베이직, 비주얼 C++등 윈도우 프로그래밍 언어나 툴들에 의해 작성되는 윈도우 프로그램들은
알고 보면 모두 윈도우 API를 사용하는 것에 불과하다. 하지만 윈도우 API의 모든 내장함수들은 종류도 많고, 사용법도 만만치 않으므로 우리는 주로 고급언어를 사용하게 된다.

앞서도 많이 강조했지만 비주얼 베이직은 사용자의 편의를 정말 많이 생각한 툴이라고 했었다. 그 이유중에 하나가 바로 베이직 화면에 있는 툴박스를 통해 쉽게 컨트롤을 사용해 프로그램을 작성할 수 있다는 것이다.

컨트롤의
정체에 대해서 조금 더 접근해 보자.
한마디로 컨트롤은 완성된 프로그램이다. 하지만 실행되는 프로그램은 아니다. 이것은 다른 프로그램에 삽입되어 추가적인 기능을 붙여주는 것이다. 뒤집어 말하자면 프로그램을 작성하는 사람의 수고를
덜어주는 역할이 있다는 것이다. 예를 들어 베이직을 실행시키고 폼하나를 띄운 다음 그냥 F5로 Run
하여 결과를 확인해 보자. 아마 빈윈도우 하나만 뜰 것이다. 이것을 윈도우 API로 작성하게 될 경우엔
윈도우 하나를 View 하기 위해 일일히 코딩을 해야 하는 어려움이 있게 된다. 아직 모르는 부분이 태반이기 때문에 요약은 이렇게 해보겠다. '
일정한 시각적 형태와 기능을 포함하는 프로그램 독립적 단위'이라고 하고 싶다. 이정도로라 해도 컨트롤이 대충 무엇이다라고 느껴진다면 성공이라고 보고 싶다.


2. 컨트롤의 종류

비주얼 베이직의 컨트롤은 세가지로 분류된다.
첫째는 툴박스에 나타나 있는 기본(커스텀) 컨트롤이며 두번째는 메뉴 (프로젝트-구성요소-컨트롤)를 선택해 고를수 있는 ActiveX 컨트롤이다. 마지막으로 사용자 스스로가 작성할 수 있는 사용자 정의
컨트롤이 있다. 컨트롤의 확장자는
.ocx, .dll 이며 이 세가지는 차이는 별로 없다.


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

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

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


3. 컨트롤 선택

툴박스의 컨트롤을 더블클릭 하거나 선택후 폼위로 마우스를 옮긴후 드래그 하면 폼위에 컨트롤이
생긴다. 위치나 크기는 마우스로 조작 가능하다. 더 자세한 사용법은 이벤트와 프로퍼티에 대한 설명이 있어야 가능하므로 나중에 이야기 하도록 하겠다.



4. 프로퍼티 (Property)

프로퍼티란 '속성'을 의미한다. 여기서 한가지 먼저 설명할 것이 있다.
'OOP'에 대한 것인데 'OOP'는 '객체지향 프로그래밍'의 약자이다. OOP의 세계는 객체와 클래스가
주개념으로 취급된다.
객체란 말그대로 속성과 기능을 갖고 있는 어떤 추상적, 현실적 사물을 말한다.
사람, 차, 컴퓨터등등.. 여담이지만 서양사람들은 OOP적인 세계관을 갖고 있다고 한다. 그래서 OOP를 우리도 배워야 하는 것인지도 모르지만.


간단하게 말해보자. 위 코너에서 '구조체'에 대해서 설명을 했었다.
구조체에는 각종 속성을 정의할 수 있다고 했다.
객체 구조체는 무척 비슷하다. 한가지 크게 구별되는 차이점이 하나 있는데 그것은 객체는 매소드라고 부르는 행동방식을 갖고 있다는 점이다. 반면 구조체는 단순히 데이타만 갖고 있을 뿐이다. 더 단순하게 말해서 객체는 구조체에 매소드를 추가시킨
정도라고 이해하면 편할 것이다.

프로퍼티에 자세한 설명을 하겠다.

프로퍼티는 객체가 갖을 수 있는 속성이라고 정의할 수 있으며 구체적인 실례로 [컨트롤].[프로퍼티]
로 사용 가능하다. 예를 들어 보자.


Private Sub Command1_Click()

Text1.Text = "커맨드 버튼을 누르면 텍스트 박스에 이글자들이 뜹니다"
........

End Sub


가정하기로 한다. 현재 폼위에는 커맨드 버튼 컨트롤 한개, 텍스트 박스 컨트롤 한개, 이렇게 두개의
컨트롤이 위치하고 있다. 또한 프로퍼티 윈도우상에 나타나 있는 텍스트 컨트롤의 프로퍼티들 중 Name = "Text1", Text = "Text1"이라고 한다. (처음에 텍스트 컨트롤을 위치시켰을때 나타난 문자열은 "Text1"
이다. 이는 프로퍼티 윈도우에서 확인할 수 있다.)


[결과]

커맨드 버튼을 클릭하면 "커맨드 버튼을 누르면 텍스트 박스에 이글자들 이 뜹니다"라는 문자열이
텍스트 박스에 나타나게 된다.


[해석]
텍스트 박스 컨트롤은 툴박스에 위치해 있는 중이다. 그런데 우리는 이 텍스트 박스를 사용하기 위해
하나 끌어다 놓았다. 마치 손도장을 갖고 자기 이름을 찍는 것 처럼 말이다. 원판과 복제판의 경우라고
보면 되겠다. 어쨌든 이제 폼위에 놓여있는 텍스트 박스는 특수한 것이 된 상태다. 이것은 하나의 객체로서 재탄생된 것이다. 객체는 속성, 프로퍼티를 갖고 있다고 말했다. 텍스트 박스 컨트롤이라는 손도장을 보면 나타나는 문자열은 모두 Text라는 프로퍼티에 담겨 져 있는데 우리는 이 프로퍼티에
위 문자열을 새로 넣은 것 뿐이다.



5. 프로퍼티는 어떻게 변경될 수 있는가?
프로퍼티는 두가지 방법으로 변경 가능하다.

'디자인 모드'와 '실행 모드' 이 두가지 상태에서 변경할수 있는데, '다자인 모드'에서 바꾼다는 뜻은
'프로퍼티 윈도우'에서 사용자가 직접 값을 넣어준다는 것을 의미하며 '실행모드'는 코드 윈도우에서
사용자가
코딩에 의해 값을 넣어주는 것을 말한다. 컨트롤들은 저마다 프로퍼티를 지니고 있다. 공통되는 속성도 있고 독특한 속성도 있다. 대개는 '디자인 모드'와 '실행 모드'에서 변경 가능하지만 모두가
그런것은 아니다. ReadOnly 속성을 지닌 프로퍼티는 '디자인 모드' 에서만 가능한데 이런것들은
'도움말'을 통해 확인 가능하다. 비주얼 베이직에서 쓰이는 도움말을 MSDN이라고 한다. 가능하면
구해서 인스톨시켜 사용하면 편리하다.



6. 매소드

매소드란 객체가 취할수 있는 행동을 뜻한다.
많이 쓰이는 예제를 하나 설명하며 매소드를 끝마치려 한다.

Form1.Show
Form1.Hide

Form1.Show : 매소드도 프로퍼티와 마찬가지로 [객체].[매소드]의 형태로 사용된다. 폼도 하나의
객체이다. 따라서 폼의 매소드를 갖고 있는데 대표적인 것이 Show 매소드이다. 영문에서도 알 수 있듯이 뜻은 '폼을 보여주어라'이다. 뒤의 Form1.Hide는 '폼을 숨기라'라는 명령문이다. 몇번 써버면 대충 그 뜻을 알 수가 있다.



7. 이벤트

이벤트란 '
사건' 을 의미한다. 우리는 윈도우95/98를 부팅 시킨후 각종 프로그램을 사용한다.
탐색기를 열어 프로그램을 실행시킬 수도 있고 메모장을 열어 문서를 편집할 수도 있다. 하지만
보이진 않아도 여러 이벤트가 내부적으론 벌어지고 있는데 마우스가 어떤 객체(윈도우, 컨트롤) 위를
지나갈때 벌어지는 Object_MouseMove 이벤트, 키보드를 누를때 발생하는 Object_KeyDown와 Object_KeyPress, 클릭할때의 Object_Click등이 있다. 조금 더 들어가 보자. 폼은 어떻게 화면에
보여지게 되는가?


Private Sub Form_Load()

......................................

End Sub


아마 많이들 보았으리라 생각한다. 이 폼로드 이벤트는 매우 중요하다.
이 이벤트의 역할은 폼을 메모리에 적재하는 것이다. 그런데 의문이 생길지도 모른다. 폼에 다른
컨트롤이나 코드를 붙이지 않고 그냥 기본폼을 F5로 실행시켜 보면 폼이 보인다. 어떻게 된 것일까?


프로그램을 실행해 보면 세가지의 이벤트가 벌어진다.
Form_Initialize, Form_Load, Form_Activate
이렇게 세개의 이벤트가 사용자의 의지와는 상관없이
차례로 발생하므로 폼은 보여진다. Form_Initialize는 폼을 초기화 하는 이벤트이며, Form_Load는
폼을 메모리에 적재시키며, Form_Activate는 폼을 실제로 비디오 화면에 보여주는 이벤트이다. 처음
접한다면 복잡할지도 모르겠다. 하지만 여기서 중점을 두는 것은 이러한 폼의 이벤트 순서나 기능이
아니다. 정보처리기사 실기 출력화면폼에서 보면 거의 MSFlexGrid폼을 사용하고 있다. 이 컨트롤의
프로퍼티의 초기화 과정에 대해 이야기하고 싶은 것이다.
프로퍼티들의 초기화, 즉 변경은 '실행모드'에서 가능 하다고 이미 이야기 했었으며 폼을 적재한다는 Form_Load 이벤트는 컨트롤의 프로 퍼티들을 초기화 할뿐만 아니라 사용자가 정의한 변수의 초기화도 가능케 하기 때문이다. Form_Load 이벤트를 잘이용할 수 있다면 많은 것을 얻을 수 있다.