MsgBox

P/L/Visual Basic 2011. 12. 13. 16:47
[출처] 21. MsgBox|작성자 쟈드


MsgBox의 깊은 곳

지금까지의 강좌들 중에서 MsgBox를 사용했던 부분이 몇 군데 있었다. 그때는 이 MsgBox에 대해 자세히 설명하지 않고 넘어갔었는데 이제 이 함수에 대해 알아볼 때가 된 것 같다. 비베는 두 개의 대화상자 함수를 제공한다. 그 중 하나는 이 MsgBox이고 다른 하나는 InputBox이다. 먼저 MsgBox에 대해 알아보자. 아래는 지금까지 강좌에서 사용했던 MsgBox의 사용법이다.

MsgBox "어쩌구 저쩌구" 비베는 이 문장을 만나면 아래처럼 대화상자를 보여주게 된다.

그러나 이것만이 MsgBox의 전부는 아니다. 좀 더 완전한 MsgBox의 형식은 아래와 같다.

MsgBox {prompt}[, {button}[, {title}] 이 외에도 도움말과 관련된 인수가 2개 더 있는데 그것들은 설명하지 않기로 하겠다. 지금까지 사용해왔던 사항에서도 알 수 있겠지만 위에서 MsgBox를 호출하면서 건네주었던 인수인 "어쩌구 저쩌구"는 {prompt}에 해당되며 이것은 MsgBox가 보여지면서 표시할 내용이다. 이것은 MsgBox에게 꼭 넘겨야 하는 인수이다.

다음의 {button}은 MsgBox에게 어떤 버튼들을 나타내라고 지시하게 된다. 아무것도 지정하지 않으면 기본적으로 "확인" 버튼이 나타나도록 설정되어 있다. 나머지 {title}은 타이틀바에 나타낼 MsgBox의 캡션이다. 이제 원시적인 MsgBox의 사용에서 벗어나 아래처럼 지정해 보았다.

MsgBox "어쩌구 저쩌구", vbOKCancel, "MsgBox 연습" 결과는 아래와 같다.

MsgBox의 버튼 설정

다른 것은 다 이해가 되었을테고 문제는 아마도 {button} 부분일 것이다. 위에서는 vbOK를 지정했는데 이러한 상수는 미리 정의되어 제공된다. 버튼의 종류를 설정해주는 상수의 종류는 아래와 같다.

    상수

    버튼

    vbOkOnly

    0

    vbOkCancel

    1

    vbAbortRetryIgnore

    2

    vbYesNoCancel

    3

    vbYesNo

    4

    vbRetryCancel

    5

위의 표에서 값이란 상수 대신 그 숫자를 사용해도 된다는 뜻이다. 상수는 그 값에 해당하는 또 다른 이름일 뿐이다. 즉 아래의 두 경우는 완전히 같다고 볼 수 있다.

MsgBox "Test", vbOkOnly MsgBox "Test", 0 여기까지, 여러분은 MsgBox를 호출하면서 어떻게 메세지를 지정하는지, 어떻게 타이틀을 지정하는지, 어떻게 버튼을 지정하는지 알 수 있게 되었다. 그럼 이것을 어디에 사용할 것인가?

MsgBox의 리턴값

기억하겠지만 앞에서 MsgBox에 대해 말하기 시작하면서 MsgBox가 함수라고 했었다. MsgBox는 단순히 사용자에게 어떤 정보를 알려주면서 주의를 환기시키는데 사용될 수도 있지만(가령 파일관리 프로그램에서 몇개의 파일이 지워졌다는 것을 출력) 대개는 다시 프로그램에서 쓰여지기 위해 MsgBox가 되돌려주는 값을 필요로 한다. 그렇다면 먼저 MsgBox가 어떤 값을 리턴하는지 알아보도록 하자.

    상수

    vbOK

    1

    vbCancel

    2

    vbAbort

    3

    vbRetry

    4

    vbIgnore

    5

    vbYes

    6

    vbNo

    7

대충 짐작이 갈 것이다. 아래처럼 MsgBox를 호출하고 MsgBox가 되돌려주는 값을 변수 x에 넣는다고 가정하자('='의 좌변에 다른 항이 있으므로 MsgBox의 인수들은 괄호로 둘러싸여야 한다).

Dim x As Integer x = MsgBox("두 버튼 중 하나를 선택하세요.", vbYesNo, "Test") MsgBox는

의 버튼을 보여줄 것이고 이 중에 하나를 선택하게 될 것이다. 그럼 MsgBox가 리턴하는 값은 분명히 vbYes나 vbNo 중 하나가 된다. vbAbort 등의 값은 나올 수 없다. 이렇듯 MsgBox가 리턴하게 되는 값은 MsgBox를 호출하면서 {button}을 어떻게 지정했느냐에 달려 있다. 만약 {button}에 vbRetryCancel을 지정했다면

의 버튼이 보여지고 이번에는 MsgBox가 리턴하게 될 값은 vbRetry나 vbCancel, 둘 중의 하나가 된다. 덧붙여서 MsgBox는 Esc 키에 의해서도 동작하는데 위와 같은 경우 Esc 키가 눌리게 되면 '취소' 버튼을 누른것과 같은 결과를 가져온다. 즉, MsgBox는 vbCancel을 리턴한다.

그렇다면 MsgBox의 일반적인 사용예를 들어보도록 하겠다. 우리는 흔히 어떤 파일을 지울 때 정말 지울 것인지 확인하는 절차를 거치게 된다. 이것은 주로 MsgBox를 이용해 구현되게 된다. 아래의 코드를 보자.

Dim r As Integer r = MsgBox("이 파일을 정말 지울건가요?", vbYesNo, "파일 삭제 확인") If r = vbYes Then {파일을 지우는 루틴} End if 여기에서 MsgBox를 통해 사용자의 마지막 의견을 물어본 다음 r이 vbYes이면(사용자는 '예' 버튼을 눌렀음) 파일을 지우고 끝낸다. r이 vbNo일 경우에는 파일을 지우지 않고 아무일도 없었던 것 처럼 지나가면 그 뿐이다. 아래는 실제로 실행시킨 그림이다.

디폴트 버튼

앞의 예제에서 버튼을 잘 살펴보자. '예' 버튼은 점선으로 둘러싸여 있다. 이것은 바로 '예' 버튼이 디폴트 버튼으로 엔터키를 눌렀을 때 자동으로 '예' 버튼이 선택되는 것을 뜻한다. 문제는 바로 여기에 있다. 어떤 사용자들은 아무 생각없이 엔터키를 누르기도 하는데 내용을 확인해 보지도 않고 엔터키를 눌러버리면 파일이 지워져 버리는 것이다. 실수였다고 안타까워 하기에는 시간이 이미 늦은 경우가 많다. 물론 코드를 아래처럼 변경해서 이 문제를 해결할 수는 있다.

Dim r As Integer r = MsgBox("이 파일을 지울지 않을거죠?", vbYesNo, "파일 삭제 확인") If r = vbNo Then {파일을 지우는 루틴} End if 문제는 해결되었지만 어딘가 석연치 않은 느낌이다. 이것은 MsgBox에서 첫번째 버튼이 디폴트 버튼이 되기 때문에 생기는 문제로 더 유연한 문제해결 방법으로는 디폴트 버튼을 바꿔주면 된다. 아래의 유연한 코드를 보라. Dim r As Integer r = MsgBox("이 파일을 정말 지울건가요?", vbYesNo + vbDefaultButton2, "파일 삭제 확인") If r = vbYes Then {파일을 지우는 루틴} End if 이렇게 디폴트 버튼을 변경하게 하는 상수는 아래와 같다.

    상수

    의미

    vbDefaultButton1

    0

    첫번째 버튼

    vbDefaultButton2

    256

    두번째 버튼

    vbDefaultButton3

    512

    세번째 버튼

아이콘

이번에 말하려는 것은 버튼과는 상관이 없다. 어떤 MsgBox는 왼쪽 구석탱이에 작은 아이콘을 달고 나오기도 하는데 바로 그것에 관한 이야기이다. 이것 또한 상수로 제공되며 버튼과 관련은 없지만 위의 디폴트 버튼을 변경하는 예제와 마찬가지로 버튼의 설정값에 그 값을 더해 구현된다. 종류는 다음과 같다.

    상수

    아이콘

    의미

    vbCritical

    16

    치명적인 오류

    vbQuestion

    32

    경고 또는 질문

    vbExclamation

    48

    경고

    vbInformation

    64

    참고 사항이나 정보

이러한 아이콘에 특별한 기능이 있는 것은 아니다. 다만 사용자의 주의를 끌기 위한 방법이며 만약 제어판의 소리에서 몇몇 항목에 지정해 놓은 소리가 관련된 아이콘이 나타날 때 들리게 될 뿐이다. 하지만 밋밋한 MsgBox 보다는 이 편이 좀 더 세련된 편이다.

이렇게 해서 MsgBox에 대해 알아 보았다. 무슨 특별한 것도 없는 것인데, 설명하다보니 생각보다 길어지게 되었다. 다음은 InputBox에 대해서 알아보도록 하자.

InputBox

InputBox는 MsgBox와 비슷하지만 사용자로부터 어떤 내용을 입력받기 위해 쓰인다. 아래는 InputBox의 형식이다.

InputBox {prompt}[, {title}][, {default}][, {xpos}][, {ypos}] 실제로는 두 개의 인수가 더 있지만 그것들은 설명하지 않기로 하겠다. {prompt}와 {title}은 MsgBox와 같은 역할을 하므로 설명은 생략하겠다.
  • {xpos}, {ypos}:

    나타나는 InputBox의 x좌표와 y좌표의 픽셀 단위 좌표이다.

  • {default}:

    문자열 상자에 기본적으로 나타날 문자열이다.

그렇다면 다음과 같은 형식으로 명령해보자.

InputBox "아무런 문자나 입력하세요.", "InputBox Test", "아무런" 결과는 아래와 같다.

특별히 어려운 것은 없을 것이다. 그런데 InputBox는 어떤 문자열을 입력받기 위한 것이므로 위와 같이 해주는 것은 아무짝에도 쓸모없는 무용지물일 뿐이다. 위의 코드는 아래와 같은 형식으로 바뀌어야 한다.

Dim r As String r = InputBox("아무런 문자나 입력하세요.", "InputBox Test", "아무런") 변수 r에는 어떤 값이 들어갈까? InputBox에서 '확인'을 누르면 텍스트박스에 입력된 내용이, '취소'를 누르거나 Esc 키를 누르면 길이가 0인 문자열("")이 리턴되어 r에 저장된다.

이렇게 해서 MsgBox와 InputBox에 대해 알아보았다. 특히 MsgBox는 예제에서 가끔 사용될 예정이므로 어느정도는 익혀두도록 하자.


[출처]
21. MsgBox|작성자 쟈드

Posted by 야동우
,