본문 바로가기
Development/C#

TextBox에 숫자만 입력받기

by KingCat 2011. 4. 29.
우선 TextBox에 KeyDown 이벤트를 추가한다.
그리고나면

private void TextBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (checkNumber(e.Key))
            {
                e.Handled = false;
            }
            else e.Handled = true;
        }

위와 같은 코드를 생성하면 되는데, e.Key를 통해 눌린 키를 확인할 수 있다.
눌린 키가 숫자이면 checkNumber 메서드는 true를 반환하므로
결국 e.Handled가 false면 입력이된다.

즉, e.Key를 통해 눌린 키를 확인하고, e.Handled에 false를 반환하면 입력이 되고, true를 반환하면 입력이 되지 않는다.

숫자를 확인하는 checkNumber 메서드는 아래와 같이 구현했다.

switch (e.Key)
            {
                case Key.D0:
                case Key.D1:
                case Key.D2:
                case Key.D3:
                case Key.D4:
                case Key.D5:
                case Key.D6:
                case Key.D7:
                case Key.D8:
                case Key.D9:
                case Key.NumPad0:
                case Key.NumPad1:
                case Key.NumPad2:
                case Key.NumPad3:
                case Key.NumPad4:
                case Key.NumPad5:
                case Key.NumPad6:
                case Key.NumPad7:
                case Key.NumPad8:
                case Key.NumPad9:
                    return true; break;
                default:
                    return false; break;
            }

Key를 전달받아 숫자면 true 반환, 그 외에는 false를 반환한다.

하나로 합쳐서 KeyDown 이벤트에

private bool checkNumber(Key key)
        {
            // 입력받은 키가 입력이 가능하면 True 반환
            switch (key)
            {
                case Key.D0:
                case Key.D1:
                case Key.D2:
                case Key.D3:
                case Key.D4:
                case Key.D5:
                case Key.D6:
                case Key.D7:
                case Key.D8:
                case Key.D9:
                case Key.NumPad0:
                case Key.NumPad1:
                case Key.NumPad2:
                case Key.NumPad3:
                case Key.NumPad4:
                case Key.NumPad5:
                case Key.NumPad6:
                case Key.NumPad7:
                case Key.NumPad8:
                case Key.NumPad9:
                    e.Handled = false;
                default:
                    e.Handled = true;
            }
        }

이런 식으로 구성해도 될 듯하다.