Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[컨트롤, 입력] MaskedTextBox

작성자 : 박종명
최초 작성일 : 2008-06-25 (수요일)
최종 수정일 : 2008-06-25 (수요일)
조회 수 : 4671

네임스페이스: System.Windows.Forms
어셈블리: System.Windows.Forms(system.windows.forms.dll)

 

사용자의 입력을 받는 대표적인 컨트롤이 텍스트박스(TextBox) 컨트롤입니다

이번 포스트에서는 이 텍스트박스 컨트롤의 확장형인 MaskedTextBox 컨트롤에 대해서 간략히 알아보겠습니다

MaskedTextBox 컨트롤은 닷넷 프레임워크 2.0 에 추가된 컨트롤입니다

 

다음은 이 컨트롤의 정의부입니다

 

정의부를 보면 이 컨트롤은 TextBoxBase 로 부터 상속받는 컨트롤입니다

MaskedTextBox 컨트롤 이외에도 TextBoxBase 를 상속받는 컨트롤은 두 개가 더 있습니다

다들 아시다시피 TextBox 컨트롤과 RichTextBox 컨트롤입니다

 

TextBoxBase 클래스는 텍스트(Text) 컨트롤에 필요한 기본기능을 구현해 놓은 추상클래스 입니다

 

MaskedTextBox 컨트롤은 기본적인 텍스트박스 역할에 더하여 사용자의 입력을 돕는 추가적인 기능을 제공해 줍니다

일단 간단한 샘플을 보겠습니다

 

다음 샘플그림은 전화번호를 입력받는 MaskedTextBox 컨트롤 입니다

아래와 같은 형태를 위해서 Mask 속성을 다음과 같이 지정합니다

maskedTextBox1.Mask = "(999)-000-0000";

 

현재 이 컨트롤을 자세히 들여다 보지는 않았지만 이 시점에서도 대략 짐작이 가능합니다

 

사용자로 부터 입력을 받는 텍스트박스(TextBox) 컨트롤을 사용할 경우 대부분의 경우 특별한 규칙없이 입력을

받아들이지만 경우에 따라서는 입력 문자가 특별한 규칙을 지켜야 할 때도 있습니다.

위의 샘플과 같이 전화번호를 입력받는 텍스트박스 컨트롤에 미리 규칙(포멧)을 정하여 정확한 형태로 입력을

받을 경우가 있을 수 있습니다..또한 IP Address 를 입력받아야 하는 경우, 날짜를 입력받아야 하는 경우 등등

다양한 경우가 있을 수 있겠지요...

 

MaskedTextBox 컨트롤은 이와 같이 일정한 규칙을 정해 입력을 받아 들이도록 하는 기능이 있으며 이외에도

입력 문자를 제어하는 다양한 기능이 있습니다. 다음은 이 컨트롤이 제공하는 기능목록 입니다

 

?  필수 입력 문자

?  선택적 입력 문자

?  마스크에서 지정된 위치에 필요한 입력 형식. : 숫자, 영문자 또는 영숫자

?  MaskedTextBox에 직접 나타나야 하는 마스크 리터럴 또는 문자. : 전화 번호의 하이픈(-) 또는 가격의 통화 기호

?  입력 문자에 대한 특수 처리. : 영문자를 대문자로 변환

 

이전 버전(닷넷 프레임워크 1.x) 에서는 이와 같은 기능은 개발자가 직접 구현해야만 했습니다

친절한(?) 닷넷 프레임워크 2.0 에서는 이러한 세세한 컨트롤 까지 제공해 주니 고마울 따름입니다 ^^;

 

MaskedTextBox 컨트롤의 대표적인 속성은 바로 Mask 속성 입니다

이 속성은 텍스트박스에 입력될 문자의 규칙을 미리 정의하는 String 속성입니다

 

앞서 샘플에서는 Mask 속성으로 '(999)-000-0000' 를 설정했습니다

 

Mask 속성을 제대로 사용하려면 규칙을 조금 알아야 합니다

샘플에서 사용된 0 9는 다음과 같은 의미를 지니고 있습니다

0 : 0 ~ 9 사이의 숫자, 필수 입력

9 : 숫자 또는 공백, 선택적

따라서 샘플의 '(999)-000-0000' 의미는 지역번호를 포함한 전화번호를 미리 지정하며,

지역번호 입력은 선택사항이라는 뜻이 됩니다

 

다음 표는 Mask 속성으로 사용될 문자(마스킹 요소)에 대한 설명입니다

 

 

 

마스킹 요소

설명

0

숫자이며 필수입니다. 이 요소는 0에서 9 사이의 한 자리 숫자를 받아들입니다.

9

숫자 또는 공백이며 선택적입니다.

#

숫자 또는 공백이며 선택적입니다. 마스크에서 이 위치가 비어 있으면 Text 속성에서 공백으로 렌더링됩니다. 더하기(+) 및 빼기(-) 기호를 사용할 수 있습니다.

L

문자이며 필수입니다. 입력을 ASCII 문자 a-z A-Z로 제한합니다. 이 마스크 요소는 정규식 [a-zA-Z]와 같습니다.

?

문자이며 선택적입니다. 입력을 ASCII 문자 a-z A-Z로 제한합니다. 이 마스크 요소는 정규식 [a-zA-Z]?와 같습니다.

&

문자이며 필수입니다. AsciiOnly 속성이 true로 설정되어 있으면 이 요소는 "L" 요소처럼 동작합니다.

C

문자이며 선택적입니다. 제어 문자가 아닌 모든 문자입니다. AsciiOnly 속성이 true로 설정되어 있으면 이 요소는 "?" 요소처럼 동작합니다.

A

영숫자이며 선택적입니다. AsciiOnly 속성이 true로 설정되어 있으면 ASCII 문자 a-z A-Z만 허용됩니다.

a

영숫자이며 선택적입니다. AsciiOnly 속성이 true로 설정되어 있으면 ASCII 문자 a-z A-Z만 허용됩니다.

.

소수점 자리 표시자입니다. 사용되는 실제 표시 문자는 컨트롤의 FormatProvider 속성에 의해 결정되는 서식 공급자에 적합한 소수점 자리 표시자가 됩니다.

,

천 자리 표시자입니다. 사용되는 실제 표시 문자는 컨트롤의 FormatProvider 속성에 의해 결정되는 서식 공급자에 적합한 천 자리 표시자가 됩니다.

:

시간 구분 기호입니다. 사용되는 실제 표시 문자는 컨트롤의 FormatProvider 속성에 의해 결정되는 서식 공급자에 적합한 시간 자리 표시자가 됩니다.

/

날짜 구분 기호입니다. 사용되는 실제 표시 문자는 컨트롤의 FormatProvider 속성에 의해 결정되는 서식 공급자에 적합한 날짜 자리 표시자가 됩니다.

$

통화 기호입니다. 실제로 표시되는 문자는 컨트롤의 FormatProvider 속성에 의해 결정되는 서식 공급자에 적합한 통화 기호가 됩니다.

< 

아래로 시프트합니다. 다음에 나오는 모든 문자를 소문자로 변환합니다.

>

위로 시프트합니다. 다음에 나오는 모든 문자를 대문자로 변환합니다.

|

이전의 위/아래 시프트를 비활성화합니다.

\

이스케이프입니다. 마스크 문자를 이스케이프하여 리터럴로 전환합니다. "\\"는 백슬래시에 대한 이스케이프 시퀀스입니다.

다른 모든 문자

리터럴입니다. 마스크 요소가 아닌 모든 요소는 MaskedTextBox에 그대로 나타납니다. 리터럴은 런타임에 항상 마스크의 정적 위치를 차지하며 사용자가 이동하거나 삭제할 수 없습니다.

 

 

MaskedTextBox 컨트롤의 대표적인 이벤트는 MaskInputRejected 이벤트 입니다

이 이벤트는 사용자의 입력이 Mask 에 정의된 제약조건에 위해 할 경우 발생하는 이벤트입니다

예를 들어 위의 샘플에서는 숫자형식만 입력받도록 Mask 속성을 설정하였는데 사용자가 문자를 입력하려고

하면 규칙이 위배되므로 MaskInputRejected 이벤트가 발생합니다

다음코드는 이 이벤트의 사용방법을 간략히 기술합니다

Mask 설정에서 길이를 넘어서거나 입력제한 문자를 입력하는 등의 경우 이를 알려주는 코드입니다

 private void maskedTextBox1_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
 {
       if (maskedTextBox1.MaskFull)
       {
          MessageBox.Show("모든 사항이 입력되었습니다. 추가입력이 불가합니다");
       }
       else if (e.Position == maskedTextBox1.Mask.Length)
       {
           MessageBox.Show("마스크 위치를 넘어섰습니다. 입력이 불가합니다");
       }
       else
       {
           MessageBox.Show("숫자만 입력해야 합니다. 입력이 불가합니다");
       }
 }

 

또한 MaskedTextBox 컨트롤은 입력 및 표현문자와 관련된 몇 가지 기능을 제공하는데 일부를 알아 보겠습니다

 

1) InsertKeyMode (열거형) 속성

    입력상자의 삽입모드에 대한 설정입니다

    키보드의 Insert 키의 동작을 생각하시면 됩니다

    보통 키보드의 Insert 키를 누르면 새로운 입력은 이전 입력사항을 덮어 쓰게 됩니다

    다음은 InsertKeyMode  열거형 값입니다

   

  

    텍스트 박스에 글을 입력할 때 이전글을 덮어 쓸지, 중간 삽입 할지에 대한 설정입니다

 

2) BeepOnError (불리언)속성

    이 속성은 텍스트 박스에 거부되는 문자를 입력했을 경우 컴퓨터 비프음 출력에 대한 설정입니다

    이 속성이 true 로 설정되어 있으면 거부되는 문자를 입력할 때 '~' 하는 경고음이 발생합니다

 

3) PromptChar (Char)속성

   이 속성은 텍스트박스에 입력 프롬프트 문자에 대한 설정입니다

   앞서 샘플에서 '_ (언더바)' 가 프롬프트 문자입니다

   이 문자를 원하는 문자로 변경할 수 있습니다

  

 

4) HidePromptOnLeave (불리언) 속성

    이 속성은 텍스트 박스에서 포커스가 떠날 경우 프롬프트 문자를 숨기는 여부를 설정합니다

 

5) TextMaskFormat (열거형) 속성

    텍스트 박스에 기록된 텍스트에서 프롬프트 문자와 리터럴 문자를 포함할지 여부를 설정합니다

    샘플에서 (000)-111-2222 라고 입력하고 난 뒤 MaskedTextBox.Text 를 받아 오면 사용자가 입력한 문자와

    리터럴 문자를 포함하고 있습니다(MaskFormat .IncludeLiterals 이 기본값 입니다)

    이 속성은 MaskFormat 열거형 값 중 하나를 지정하는데 아래는 이 열거형 값 입니다

    보통의 경우라면 기본값(MaskFormat .IncludeLiterals)을 그대로 사용하면 될 것입니다

   

   

6) CutCopyMaskFormat (열거형) 속성

    이 속성은 TextMaskFormat 속성과 유사합니다

    텍스트박스에 입력된 내용을 클립보드로 복사할 경우 리터럴 문자와 프롬프트 문자를 포함할지 여부를 설정합니다

    역시 기본값은 리터럴 문자를 포함하는 MaskFormat .IncludeLiterals 입니다

 

 

MSDN MaskedTextBox 샘플 프로젝트를 첨부하였습니다

 

 

이름
비밀번호
홈페이지
NY <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요