| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 보통2종
- 닫기버튼
- programmers
- 델리게이트
- 백준
- WPF
- 쿼리
- 일반화
- SQL
- 3일컷
- 운전면허
- Java
- Spring Boot
- 스프링부트
- 코딩테스트
- c#
- JPA
- 자바
- MySQL
- Python
- springboot
- 씨샵
- 코테
- level2
- level4
- 프로그래머스
- MVVM
- level3
- 1931번
- delegate
- Today
- Total
욱꾸미의 주꾸미 발
[WPF] IP Address Mask Control 커스텀 이벤트 수정 본문
안녕하세요. 오늘은 저번에 다룬 문제인 IP Address Mask Control에 '.'을 찍으면 다음 클래스에 밀려 찍히는 문제에 대해 해결해 보고자 합니다.
첫시도는 OnPropertyChanged를 이용해 한글자 한글자 검사하는 방법을 사용하려 했으나 생각처럼 되지 않네요.
그러다가 의외로 간단한 방법을 찾았습니다.
함께 보시죠.
생각은 간단합니다 '.'키를 인식하게 하되, TextBox에서 쓰이지는 못하게한다 입니다.
그렇기에 저는 TextBox에서 하나의 Event를 더 추가했습니다. 바로 PreviewTextInput 이벤트 입니다.
PreviewTextInput은 TextBox에 숫자만입력받고자 할 때 많이 사용한 이벤트인데. 생각해보니 IP는 어차피 숫자만 들어가니 상관없습니다.
그러면 XAML파일을 보겠습니다. 이전글이랑 똑같고 PreviewTextInput 이벤트가 추가된걸 확인해주시면 되겠습니다.
<StackPanel Margin="1" Orientation="Horizontal" >
<TextBox BorderThickness="0" PreviewKeyDown="MoveFocus_PreviewKeyDown" Width="50" PreviewTextInput="CheckNum_PreviewTextInput"/>
<TextBlock Text="."/>
<TextBox BorderThickness="0" PreviewKeyDown="MoveFocus_PreviewKeyDown" Width="50" PreviewTextInput="CheckNum_PreviewTextInput"/>
<TextBlock Text="."/>
<TextBox BorderThickness="0" PreviewKeyDown="MoveFocus_PreviewKeyDown" Width="50" PreviewTextInput="CheckNum_PreviewTextInput"/>
<TextBlock Text="."/>
<TextBox BorderThickness="0" Width="50" PreviewTextInput="CheckNum_PreviewTextInput"/>
</StackPanel>
다음은 cs코드입니다.
private void CheckNum_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("[^0-9]+");
e.Handled = regex.IsMatch(e.Text);
}
이렇게 하면됩니다. e.Text로 넘어온 문자가 regex.IsMatch를 통해 0-9사이의 숫자가 맞는지 검사하는걸로 알고있습니다.
e.Handled에 대해서는 좀 더 알아보겠습니다.

잘찍히네요.
이번글은 이렇게 마무리하겠습니다.
감사합니다. :D
내용 추가합니다. e.Handled를 검색해본결과 일단 bool 타입으로 정의한다고 합니다.
e.Handled=true, false 이런식으로 말이죠
'true시 해당키에 대한 이벤트를 완료했으니 더이상 진행하지 않는다'라는 뜻이라고합니다.
그렇기에 text에 입력되지 않고 넘어가는 듯합니다.
이상입니다. :D
'WPF' 카테고리의 다른 글
| [WPF] ViewModel에서 this.Close()구현 (0) | 2022.05.23 |
|---|---|
| [WPF] 타이틀 바 만들기_닫기, 최소화, 사이즈 조절버튼(1) (0) | 2022.04.25 |
| [WPF] IP Address Mask Control 커스텀 이벤트 추가 (0) | 2021.12.20 |
| [WPF] IP Address Mask Control 커스텀 만들기 (0) | 2021.12.16 |
| [WPF] MVVM을 이용한 PasswordBox사용 (0) | 2021.11.23 |