수안보중학교 로고이미지

RSS 페이스북 공유하기 트위터 공유하기 카카오톡 공유하기 카카오스토리 공유하기 네이버밴드 공유하기 프린트하기
3. Visual BASIC 기본 컨트롤
작성자 컴샘 등록일 19.09.18 조회수 201

 

3. Visual BASIC 기본 컨트롤

 

 

1. Label 컨트롤

 

   Label 컨트롤은 사용자가 직접 변경할 수 없는 텍스트를 표시하기 위해 사용하는 그래픽 컨트롤이다. 실행 모드에서 이벤트에 응답하여 Label 컨트롤에 표시되는 텍스트를 변경하는 코드를 작성할 수 있다. 예를 들어, 사용 중인 응용 프로그램이 변경 사항을 수행하는데 수 분이 소요된다면, Label에 진행 과정에 대한 메세지를 표시할 수 있다. 또한 Label 을 사용하여 자체에 Caption 속성이 없는 TextBox와 같은 컨트롤을 식별할 수 있다. 여러 줄의 행이나 길이가 다양한 행을 나타내는 Label을 원하는 경우 AutoSize와 WordWrap 속성을 설정하면 된다. UseMnemonic 속성을 True로 설정하면 Label의 Caption 속성에 있는 문자를 선택키로 지정할 수 있다. Label 컨트롤에 선택키가 정의되어 있을 때 <Alt+지정한 키>를 누르면 탭 순서에 따라서 Label 다음 컨트롤로 포커스가 이동한다.  

 

Label 컨트롤의 주요 속성

 

속 성

설                    명

Caption

Label이나 Label 옆에 나타나는 문자열을 결정한다

BorderStyle

Label의 테두리 모양을 결정한다. 기본값은 0-없음으로 설정되어 있으며 '1-단일고정'으로 변경하면 오목한 3차원 모양으로 변경된다.

BackColor

Label의 배경색을 반환하거나 지정한다.

ForeColor

Label의 글자색을 반환하거나 지정한다.

AutoSize

Label의 크기를 자동으로 변환할 것인지 아니면 지정된 크기로 고정할 것인지를 지정한다. True이면 자동으로 문자열 크기만큼 컨트롤의 크기가 설정된다. 초기 값은 False로 되어 있다.

WordWrap

AutoSize 속성이 True로 설정된 Label 컨트롤이 Caption 속성에 지정된 텍스트에 맞도록 수평 또는 수직으로 확장될 것인가를 지시하는 값을 "설정하거나 반환한다. True이면 위, 아래 방향으로 즉, 수직방향으로" 문자열 크기를 자동으로 맞춰준다.

UseMnemonic

Label 컨트롤의 Caption 속성 텍스트에 포함된 앰퍼샌드(&) 부호가 단축키를 정의하는지의 여부를 지정하는 값을 반환하거나 설정한다. True인 경우 앰퍼샌드(&)다음의 글자가 단축키가 된다.

 

Label 컨트롤의 사용  

    Label 컨트롤은 텍스트를 표시하기 위해 사용되고 사용자가 편집할 수 없다. 폼에 있는 개체를 식별하기 위해 사용되고 특정 컨트롤을 눌렀을 때 수행하는 동작에 대한 설명을 제공한다. 예를 들어 실행 모드에서 응용 프로그램에서 이벤트 또는 프로세스에 대한 응답으로 정보를 표시할 수 있다. 많은 경우에 여러 용도로 레이블을 사용하는데, 가장 일반적인 경우는 자신의 Caption 속성이 없는 컨트롤에 레이블을 붙이기 위해 사용된다. 예를 들어 Label 컨트롤을 사용하여 설명적인 레이블을 입력란, 목록 상자, 콤보 상자 등에 추가할 수 있다. 또한 설명적인 텍스트를 폼에 추가하여 사용자에게 도움말 정보를 제공할 수도 있다.

   실행 모드에서 이벤트에 대한 응답으로 Label 컨트롤이 표시하는 텍스트를 변경하는 코드를 작성할 수도 있다. 예를 들어 응용 프로그램이 변경 사항을 처리하는데 시간이 걸리면 레이블에 처리 상태 메시지를 표시할 수 있다.

   Label 컨트롤은 포커스를 갖지 않으므로 다른 컨트롤에 대한 선택키를 작성할 때 사용할 수도 있다.

 

 

레이블 제목 설정

   Label 컨트롤에 표시되는 텍스트를 변경하려면 Caption 속성을 사용한다. 디자인 모드에서 컨트롤의 속성 창에서 선택하여 이 속성을 설정할 수 있다.  

 

  Caption 속성의 길이를 최대 1,024바이트까지 설정이 가능하다.

 

 

텍스트 맞춤

   Alignment 속성을 사용하면 Label 컨트롤에 있는 텍스트의 맞춤을 왼쪽 맞춤(0, 기본), 가운데 맞춤(2), 오른쪽 맞춤(1)으로 설정할 수 있다.

 

 

크기 자동 조정 및 단어 보호 속성

    기본적으로 Caption 속성에 입력한 텍스트가 컨트롤 너비를 초과하면 텍스트는 다음 행으로 넘어한다. 컨트롤의 높이를 초과하면 텍스트가 잘린다.

 

   컨트롤이 자동으로 내용의 크기를 조정하도록 하려면 AutoSize 속성을 True로 설정하면 된다. 컨트롤이 가로로 확장되어 Caption 속성의 전체 내용을 맞춘다. 내용이 아래로 단어 보호되고 세로로 확장하려면 WordWrap 속성을 True로 설정하면 된다.

 

레이블을 사용하여 선택키 작성

   레이블의 Caption 속성에 있는 문자를 선택키로 정의하려면 UseMnemonic 속성을 True로 설정하면 된다. Label 컨트롤에서 선택키를 정의할 때 <Alt>키를 누른 상태에서 지정할 문자를 눌러 탭 순서에 따라 다음 컨트롤로 포커스를 옮기면 된다.

   선택키로 사용할 문자 앞에 앰퍼샌드(&)를 추가하여 Caption 속성이 있는 다른 컨트롤에 선택키를 작성할 수도 있다. 제목이 없는 컨트롤에 선택키를 지정하려면 컨트롤이 있는 레이블을 사용하면 된다. 레이블은 포커스를 가질 수 없으므로 탭 순서에 따라 다음 컨트롤로 포커스가 이동된다. 입력란, 그림 상자, 콤보 상자, 목록 상자, 드라이브 목록 상자, 모눈 및 이미지에 선택키를 지정하려면 이 기법을 사용하면 된다.

 

 

레이블이 있는 컨트롤에 선택키를 지정하려면

1) 레이블을 먼저 그린 다음 컨트롤을 그린다.  

   또는, 원하는 순서대로 컨트롤을 그리고 레이블의 TabIndex 속성을 컨트롤보다 하나 작게 설정한다.

 

2) 레이블에 선택키를 지정하려면 레이블의 Caption 속성에서 앰퍼샌드(&)를 사용한다. Label 컨트롤에서 앰퍼샌드를 표시하려면 UseMnemonic 속성을 False로 설정한다.

 

 

Lable 컨트롤의 예제  

   앞에 설명한 Label 사용 설명에 해당하는 예제를 모두다 포함하는 프로그램을 작성해보자. 먼저 위와 같이 화면을 디자인한다.

 

   이 프로그램은 제목 설정을 누르면 내용이 바뀌고 Text 맞춤에 마우스 왼쪽 버튼을 누르면 가운데 정렬, 오른쪽 버튼을 누르면 오른쪽 정렬을 하고, 세 번째 Label을 누르면 AutoSize 속성이 설정되고, 마지막으로는 선택키를 설정하는 것인데 Alt를 누른 상태에서 1을 누르면 Text1로 2를 누르면 Text2로 포커스가 이동하는 프로그램이다.

 

   코딩 전에 미리 설정되어 있어야 하는 것이 있는데 Label3는 WordWrap 속성이 True로 설정되어 있어야 하며 TextBox1과 TextBox2의 TabIndex 속성은 해당 label의 바로 다음 인덱스 번호를 가지고 있어야 한다.

 

 Label 컨트롤 예제에 대한 코드 작성은 다음과 같다.

 

     Private Sub Label1_Click()

          Label1.Caption = "Label 제목설정 예제"

     End Sub

     Private Sub Label2_MouseDown(Button As Integer, Shift As Integer,

     X As Single, Y As Single)

          If Button = 1 Then

               Label2.Alignment = 2

          ElseIf Button = 2 Then

               Label2.Alignment = 1

          End If

     End Sub

 

     Private Sub Label3_Click()

          Label3.AutoSize = True

     End Sub

 

 실행시켜서 마우스를 조작한 결과 화면은 아래와 같다.

  

 

2. TextBox

 

   편집 필드 또는 편집 컨트롤이라 부르기도 하는 TextBox 컨트롤은 디자인 모드에서 사용자가 직접 입력한 정보를 표시하거나 실행 모드에서 사용자가 입력한 코드의 내용 즉, Text 속성에서 기술한 내용을 출력하는 일을 한다.

   TextBox 컨트롤에 있는 여러 행의 텍스트를 표시하려면 MultiLine 속성을 True로 설정한다. 여러 행을 갖는 TextBox에 수평 스크롤 막대가 없으면 TextBox의 크기가 재조정되어도 텍스트는 자동 줄바꿈하여 표시된다. TextBox의 스크롤 막대 결합을 사용자 정의하려면 ScrollBars 속성을 설정한다. MultiLine 속성을 True로 설정하면 TextBox의 텍스트 정렬을 설정하기 위해 Alignment 속성을 사용할 수 있다. 기본값으로 텍스트는 왼쪽으로 정렬된다. MultiLine 속성이 False으로 설정되면 Alignment 속성은 효과가 없다.  

 

 

TextBox 컨트롤의 사용  

    TextBox 컨트롤은 실행 모드에서 사용자가 입력한 정보나 디자인 모드 또는 실행 모드에서 컨트롤의 Text 속성에 지정한 정보를 표시하는데 사용된다. 일반적으로, TextBox 컨트롤은 편집 가능한 텍스트에 사용해야 하지만 Locked 속성을 True로 설정하여 읽기 전용으로 만들 수 있다. 입력란에서 여러 줄을 표시할 수 있다. 그러면 컨트롤의 크기에 맞게 문자열을 다음 행으로 넘기고 기본 서식을 지정할 수 있다.

 

 

Text 속성

   TextBox 컨트롤에 입력한 텍스트는 Text 속성에 포함된다. 기본적으로 입력란에 최대 2,048문자를 입력할 수 있다. 컨트롤의 MultiLine 속성을 True로 설정하면 32K까지 텍스트를 입력할 수 있다.

 

 

텍스트 서식 지정

   텍스트가 컨트롤 경계를 초과하면 MultiLine 속성을 True로 설정하고 수평 스크롤 막대나 수직 스크롤 막대 또는 둘 다를 추가하도록 ScrollBars 속성을 설정하여 스크롤 막대를 추가할 수 있다. 그러면 컨트롤이 자동으로 텍스트를 다음 행으로 넘긴다. 그러나 스크롤 막대가 표시되어 가로 편집 영역이 증가되어 수평 스크롤 막대를 추가할 경우 자동 텍스트 보호 기능을 사용할 수 없다. MultiLine 속성이 True로 설정되면 텍스트를 왼쪽 맞춤, 가운데, 오른쪽 맞춤으로 정렬할 수도 있다. 기본으로 텍스트는 왼쪽 맞춤된다. MultiLine 속성이 False로 설정될 경우 Alignment 속성은 무시된다.

 

 

텍스트 선택

   SelStart, SelLength 및 SelText 속성을 사용하여 입력란에 있는 삽입점 및 선택 동작을 제어할 수 있다.

 

암호 입력란 작성

   암호 상자는 입력란으로서 사용자가 암호를 입력할 수 있다. 그러면 별표와 같은 문자가 나타난다. Visual Basic의 문자열 속성 중 두 가지 PasswordChar와 MaxLength를 사용하여 암호 입력란을 쉽게 작성할 수 있다. PasswordChar는 입력란에 표시되는 문자를 지정한다. 예를 들어 암호 상자에 별표를 표시하려면 속성 창의 PasswordChar 속성에 *를 지정한다.

   MaxLength를 사용하여 입력란에 입력할 수 있는 문자 수를 결정한다. MaxLength를 초과하면 시스템은 소리를 내고 입력란은 더 이상 문자를 받아들이지 않는다.

 

 

입력란에서 키 입력 취소

   KeyPress 이벤트를 사용하여 문자의 입력을 제한하거나 변형할 수 있다. KeyPress 이벤트는 인수인 keyascii를 사용한다. 이 인수는 입력란에 입력한 문자에 해당하는 숫자(ASCII)를 나타내는 정수이다.

   다음 예제는 입력한 키 입력을 취소하는 방법을 보여준다. 입력한 문자가 지정한 범위 내에 있지 않으면 프로시저는 KeyAscii를 0으로 설정하여 문자 입력을 취소한다. 이 예제에 대한 입력란의 이름은 txtEnterNums이고 프로시저는 입력란이 숫자 이외의 문자를 받지 않도록 한다.

 

KeyAscii를 문자의 ASCII 값과 직접 비교한다.

  

   Private Sub EnterNumtxt_KeyPress (KeyAscii As Integer)

          If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then

               KeyAscii = 0            '문자를 취소

               Beep                    '오류 알림을 소리로

          End If

   End Sub

 

읽기 전용 입력란 작성

   Locked 속성을 사용하여 사용자가 입력란에 있는 내용을 편집하지 못하도록 할 수 있다. 변경하지 않고 입력란에 있는 내용을 이동하거나 강조 표시하려면 Locked 속성을 True로 설정한다. Locked 속성을 True로 설정하면 복사 명령이 입력란에서 작동되지만 잘라내기와 붙여넣기 명령은 사용할 수 없다. Locked 속성은 실행 모드에서 사용자 상호 작용에만 영향을 준다.

 

입력란의 Text 속성을 변경하여 실행 모드에서 입력란의 내용을 프로그램에 따라 변경할 수 있다.

 

 

TextBox 컨트롤의 주요 속성

 

속 성

설     명

Text

문자열을 출력하거나 반환한다.

Locked

문자열을 편집가능 여부의 값을 반환하거나 설정한다. True이면 문자열을 편집할 수 없게 된다. 초기값은 False로 되어 있어 문자열을 편집할 수 있다.

BorderStyle

개체의 괘선 형태를 반환하거나 설정한다. '1-단일고정'을 선택하면 테두리가 3D 형태로 바뀐다. 초기값은 '1-단일고정'으로 되어 있다. TextBox에서 BorderStyle은 디자인모드에서만 값을 변경할 수 있다.

MaxLength

입력할 수 있는 최대 문자열 길이를 설정한다. 사용자가 MaxLength이상을 코딩으로 설정하여도 에러가 발생하지 않는다. 다만 입력한 문자열이 MaxLength만큼만 읽고 나머지는 잘린다.

MultiLine

입력할 수 있는 라인의 값을 설정한다. True이면 여러 줄의 문자를 입력할 수 있다. 기본값은 False다.

ScrollBars

"수평, 수직, 양방향 스크롤 바를 텍스트 컨트롤에 나타나게 한다." 만약 MultiLine이 False로 설정되어 있으면 변화가 없다. 또 수평 스크롤 바가 설정되지 않았다면 TextBox의 텍스트는 자동으로 줄바꿈을 하게 된다.

PassWordChar

입력할 값을 화면에 나타나지 않고 이 속성에 설정한 문자만을 보이게 한다. 패스워드를 입력받을 때 가장 많이 사용한다.

 

TextBox 컨트롤 사용 예제  

   

   아래의 예제는 위의 사용 방법 중에서 텍스트 서식 지정 및 텍스트 선택에 관한 예제이다.

   먼저 왼쪽과 같은 폼을 만든다.

   이 예제는 먼저 프로그램이 시작될 때부터 Text를 출력하고 사용자가 버튼을 누를 때마다 각각의 속성을 설정하는 프로그램이다. 그리고 (숫자로 변환)버튼을 누르면 현재 입력한 내용이 숫자인지를 작은 TextBox에 출력하고, (날짜로 변환) 버튼을 누르면 현재 입력한 내용이 날짜로 변환 될 수 있는지를 작은 TextBox에 출력한다. (전체 선택 후 변환)버튼을 누르면 현재 출력된 텍스트를 전부 선택하여 반전시키는 프로그램이다.

 

 

 먼저 설정해 놓아야 할 것은 첫 번째 TextBox (Intxt)의 MultiLine 속성을 True로 해 놓아야 한다는 것이다. 이 속성은 읽기 전용 속성이다. 즉, 디자인 모드에서만 변형할 수 있다. 그리고 ScrollBars 속성을 "양방향-2"로 미리 설정한다.  

 

이제 다음과 같이 코딩을 하면 된다.

 

Private Sub 전체선택cmd_Click()

            '문자열 선택을 위해서는 반드시 해당 컨트롤을 활성화시켜야 한다.

     Intxt.SetFocus

     Intxt.SelStart = 0

     Intxt.SelLength = Len(Intxt.Text)

End Sub

Private Sub 날짜cmd_Click()

     If IsDate(Intxt.Text) Then

          Resulttxt.Text = "날짜로 변형될 수 있습니다."

     Else

          Resulttxt.Text = "날짜로 변형될 수 없습니다."

     End If

End Sub

Private Sub cmdNumeric_Click()

     If IsNumeric(txtInput.Text) Then

          txtIsResult.Text = "숫자로 변형 가능."

     Else

          txtIsResult.Text = "숫자로 변형 불가능."

     End If

End Sub

Private Sub Form_Load()

     Intxt.Text = "동해물과 백두산이 마르고 닳도록" + _

                  "하느님이 보우하사 우리 나라 만세" + _

                  vbCrLf + " 무궁화 삼천리 화려 강산 " + _

                  "대한 사람 대한으로 길이 보전하세"  

End Sub

 

위 소스 코드에서 사용된 함수의 기능은 다음과 같다.

 

함 수 명

설                     명

IsNumeric

(문자열)

문자열 중에 순수한 숫자만을 갖는 문자열이면 True를 넘겨주고,

하나라도 문자가 있으면 False 값을 넘겨준다.

IsNull

(문자열)

널을 포함하는지 알아낸다.

널이면 True 값을 전달하고 아니면 False 값을 전달한다.

IsDate

(문자열)

문자열을 날짜 형식으로 변환할 수 있는지를 알아낸다.

가능하면 True 전달하고 아니면 False 값을 전달한다.

IsArray

(문자열)

배열인지, 변수인지를 알아낸다.

배열이면 True 값을 전달하고 아니면 False 값을 전달한다.

IsEmpty

(문자열)

변수가 초기화되었는지를 알아낸다.

초기화되어 있거나 변수값이 들어 있으면 True 값을 전달하고

아니면 False 값을 전달한다.

 

 

3. CommandButton 컨트롤

 

  컴퓨터의 시작, 중단, 종료 시 CommandButton 컨트롤을 사용한다.

  CommandButton이 선택된 경우 눌러진 상태로 표시된다. 그래서 누름 단추 또는 커맨드 버튼이라고도 부른다. CommandButton 컨트롤에 텍스트를 표시하려면 Caption 속성을 설정하고, 마우스를 눌러 CommandButton을 선택할 수 있다. <Enter>키를 눌러 버튼을 선택하려면 Default 속성을 True로 설정하고 <Esc>키를 눌러 단추를 선택하려면 CommandButton의 Cancel 속성을 True로 설정한다.

 

CommandButton 컨트롤의 주요 속성

 

속 성

설                명

Cancel

폼에서 명령 단추가 취소 단추인지 아닌지를 나타내는 값을 반환하거나 설정한다. 이 명령 단추는 CommandButton 컨트롤이거나 명령 단추처럼 작동하는 OLE container 컨트롤 내의 어떤 개체일 수도 있다.

Caption

CommandButton에 나타나는 문자열을 결정한다.

 

속 성

설                    명

Default

CommandButton 컨트롤이 폼의 기본 명령 단추인지 결정하는 값을 반환하거나 설정한다.

DownPicture

컨트롤이 눌려진 위치에 있을 경우 컨트롤에 나타나는 그림에 참조를 반환하거나 설정한다. Style 값이 1인 경우에만 유효하다.

Picture

CommandButton의 Style이 1인 경우 버튼에 위치시킬 그림을 설정할 수 있다.

Style

그래픽 버튼을 사용할 지 여부를 설정한다. 0(vbButtonStandard)인 경우 일반 버튼을 나타내고 1(vbButtonGraphical)인 경우 그래픽을 포함한 버튼을 만들 수 있다.

 

CommandButton 예제  

   컨트롤 예제를 사용자가 아이디와 패스워드를 입력해서 승인을 받을 수 있는 사용자 인증 프로그램을 작성해 보자. ID는 "liguy"로 하고 패스워드를 "VBasic"이라고 했을 때 사용자가 이를 정확히 입력하면 "올바른 아이디와 패스워드입니다."라는 메세지를 출력하고 3번 이상 틀리면 "다시 한번 확인하시고 시도하세요."라는 메세지를 출력하고 프로그램을 종료하는 프로그램을 만든다.

 

 

 

 

 

 

 

 

 

 

화면 디자인하기

  위 그림과 같이 디자인하고 지시되어 있는 대로 속성을 설정하면 된다.

 

CommandButton에 아이콘을 넣으려면 Style -> 1-그래픽 Picture -> 아이콘을 찾아서 선택

 

구현하기

   위에 그림처럼 설정을 하고 일단 실행시켜 보고 확인 단추를 누른다. 그럼 누르는 순간 그림이 바뀌는 것을 알 수 있다. 이것은 DownPicture 속성에 그림을 다른 것으로 설정했기 때문이다. 그리고 버튼의 속성 중 확인 버튼에 Default 속성을 True로 해주고 취소 버튼에 Cancel 속성을 True로 해주고 나서 Enter키를 누르면 확인 버튼에 기술된 이벤트 코드를 실행하고 Esc키를 누르면 취소 버튼에 기술된 이벤트 코드를 실행하게 된다. 그리고 한 가지 더 TextBox 중 Password를 입력받는 TextBox는 글자가 보이면 안 되는데 그럴 때에는 속성 중 PasswordChar에 '*'라고 써넣는다. 그렇게 하면 패스워드에 "*"표만 찍힌다.

 

  위에서 설명한 기능을 구현해 보면 다음과 같다.

소스코드보기

 

                     ' 입력 횟수를 세기 위한 변수

Dim Cnt As Integer

Private Sub 취소cmd_Click()

    Unload Me

End Sub

Private Sub 확인cmd_Click()

    If IDtxt.Text = "liguy" And Passtxt.Text = "VBasic" Then

                     ' 입력한 아이디와 패스워드를 확인

                     ' 메세지 박스 출력

    MsgBox "입력한 정보가 정확합니다.", vbOKOnly, "입력 확인"

    Else

                     ' 틀린 메세지 출력

    MsgBox "입력한 정보가 틀렸습니다.", vbOKOnly, "입력 확인"

                     ' 카운트를 증가시킨다.

    Cnt = Cnt + 1

                     ' 카운트가 3인지를 검사하여 3이면 메세지를 출력하고

                     ' 프로그램을 종료한다.

    If Cnt >= 3 Then

    MsgBox "다시 한번 확인하시고 시도하세요", vbOKOnly, "프로그램 종료"

    Unload Me

    End If

    IDtxt.Text = " "        ' 이미 입력한 정보를 지우고 새로 입력받는다.

    Passtxt.Text = " "

    IDtxt.SetFocus

    End If

End Sub

 

실행 결과 보기

 

 

다음글 2. Visual Basic의 기본 조작