ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TextBox 숫자만 입력 가능하게 하기
    C#/WPF 2016. 4. 14. 15:58

    WPF를 사용하며 textbox를 사용할 때 숫자만 입력가능하게 해야할 때가 있습니다. 그럴때 사용할 수 있는 코드입니다.

    (WPF에는 WinForm에 있던 KeyPress event가 없습니다.)


    우선 textbox의 PreviewKeyDown event handler를 추가해줍니다.

    (그냥 KeyDown을 사용하면 스페이스바와 백스페이스를 처리해주지 못합니다.)


    기본적인 원리는 이벤트에 들어온 EventArgs를 이미 처리해서 더 이상 해당 Args를 처리 할 필요가 없다고 처리해주는 것입니다.


    위 원리만 맞춰준 간단한 코드입니다.



    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void textBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (!(((Key.D0 <= e.Key) && (e.Key <= Key.D9))
            || ((Key.NumPad0 <= e.Key) && (e.Key <= Key.NumPad9))
            || e.Key == Key.Back))
        {
            e.Handled = true;
        }
    }
    cs



    p.s. 기타 다른 방법들 예로 KeyConverter, keyInterop.VirtualKeyFromKey 등을 사용해 보았지만 이러한 방법들로는 NumPad에서 입력되는 숫자들을 받지 못했습니다. 그래서 위와 같은 방법을 사용하게 되었습니다.


    숫자만 입력받는 것이 아닌 원하는 글자만 입력받는 것은 위에서 if문 조건판정만 바꿔주면 됩니다.

    잘못된 키를 입력할 경우 


    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void textBox_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (!(((Key.D0 <= e.Key) && (e.Key <= Key.D9))
                   || ((Key.NumPad0 <= e.Key) && (e.Key <= Key.NumPad9))
                   || e.Key == Key.Back))
        {
            MessageBox.Show("숫자만 입력해 주십시오");
            e.Handled = true;
        }
    }
    cs


    와 같이 할 수 있습니다.

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

    WPF Uri 상대경로  (2) 2016.11.08
    WPF 마우스 휠 이벤트  (0) 2016.05.16
    WPF FontDialog 사용하기  (0) 2016.04.19
    WPF 음악파일 재생하기  (0) 2016.04.16
    WPF에서 듀얼 모니터 전체화면  (0) 2016.04.10

    댓글

GiGong