정리가 필요한 카테고리(추후 정리)/C#,Unity

C#WPF] 텍스트박스에 숫자만 입력하게 만들기

TwinParadox 2018. 4. 2. 23:44
728x90

명백히 숫자만 들어올 텍스트 박스에는 숫자만 들어가게끔 하는 것이 좋다.

유저가 숫자만 입력할 수 있는 컨트롤이라는 것을 인지하게끔 해당 컨트롤에 입력하기 전에 숫자만 입력할 수 있다는 사실을 알리는 것이 가장 효과가 크지만, 호기심으로 혹은 실수로 숫자가 아닌 것이 입력하는 경우가 있기 때문에 입력 자체를 제한하는 것이 필요할 때가 있다.



WPF에서는 KeyDown 이벤트나 PreviewKeyDown 이벤트가 발생할 때 아래 메서드를 작동시켜, 해당 컨트롤에 숫자 외의 텍스트가 입력되는 것 자체를 막는 방법을 사용할 수 있다.

        private void TextBoxFrequency_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (!Char.IsDigit((char)KeyInterop.VirtualKeyFromKey(e.Key)) & e.Key != Key.Back | e.Key == Key.Space)
            {
                e.Handled = true;
                MessageBox.Show("숫자만 입력해주세요.\n단위는 분(min)입니다.", "오류", MessageBoxButton.OK, MessageBoxImage.Error);
            }
        }


이 방법을 사용하면 숫자 입력 외에 모든 입력을 차단한다. 심지어 키패드에 있는 숫자를 눌러도 차단하는 불상사가 발생한다.



PreviewTextInput 이벤트를 사용하고 정규식을 비교하는 방법으로 메서드를 개선하면 키패드를 통한 숫자 입력도 가능하게 만들 수 있다.

        private void TextBoxFrequency_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            Regex regex = new Regex("[^0-9]+");
            e.Handled = regex.IsMatch(e.Text);
        }


728x90
728x90