프로젝트를 진행 하다 보면
TextBox 컨트롤 등에서
숫자만 입력 할 수 있도록 구현 하는 경우가 자주 있을 것 같다.
전화번호 또는 주민번호 입력 받을 경우와 같은경우가
그러한 예가 될듯 하다
많이 사용되는 만큼 다양한 방법으로 기능 구현이 가능 할 것 같다.


최근 알람 프로그램 Alarms Manager 를 구현하면서 
사용한 숫자만 입력 받는 KeyPress 이벤트 함수 이다.

        private void txtInterval_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsNumber(e.KeyChar) && e.KeyChar != 8)
            {
                e.Handled = true;
            }
        }

KeyPress 이벤트 매개변수로 넘어온 e 객체를 이용하여 char 클래스를 이용하는 방법인데
e 객체는 char형으로 변환 할 수 있다.
그래서 변환된 e의 char형이 숫자 인지 아닌지 IsNumber 함수를 이용하여 비교하여
이벤트 처리여부 (e.Handled)를 설정해주면 끝나는 것이다. 
여기에 백스페이스 키는 숫자형식은 아니지만 입력시에 필요한 키 라고 판단되어
백스페이스키의 아스키 값인 8 을 비교하여 입력 될 수 있도록 하였다.

MSDN을 찾아 보면 KeyDown 이벤트와 KeyPress 이벤트를 이용하여
동일한 기능을 구현한 예제를 찾아 볼 수 있을것이다. 
KeyDown 이벤트의 매개변수로 전달되는 e객체는 keys 값을 얻어 올수 있지만
char 값은 구하기 어려운 부분이 있어서
KeyPress 이벤트를 이용하여 구현하는것도 나쁘지 않을거 같다. 
하지만 성능적인 부분이나 효율성 부분에서는 어떠한 방식으로 구현하는것이
더 나은방법인지는 잘 모르겠다. 
프로그램 코드가 짧고 이해하기 쉬우면 좋은 방법이 아닐까 하고 생각되어 구현해본 방식일 뿐이다.

동일한 기능이 오래전부터 사용되어 많은 분들이 알고 있는 내용이겠지만
혹시나 필요한 정보를 찾는 분들에게 조금이나마 도운이 되었으면 하는 바램으로 남겨본다.


'C#' 카테고리의 다른 글

설치 프로젝트 생성시 UnInstall 기능 추가  (0) 2008.11.11
사운드(WAV) 재생  (0) 2008.11.09

+ Recent posts