2020년 8월 26일 수요일

WPF 한글, 숫자만 입력 가능하도록

 WPF 한글, 숫자만 입력 가능하도록

n 키보드 입력을 제어해서 한글 또는 숫자만 입력 가능하도록 구현하는 예제를 작성해보자

n 한글 입력은 KeyDown, KeyUp등 에서 감지하기 어려우므로 PreViewKeyDown에서 체크를 해야하는데 KeyEventArgs의 ImeProcessed를 체크하여 한글키 입력을 알수있다.

n private void txt2_PreviewKeyDown(object sender, KeyEventArgs e)

{

// 한글이면 키입력 막음

if (e.Key.Equals(Key.ImeProcessed))

{

e.Handled = true;

}

// Esc 키를 누르면 프로그램 종료

if (e.Key.Equals(Key.Escape)) Close();

}

n 텍스트 박스에서 숫자만 입력을 받아야 하는 경우 PreviewTextInput 에서 다음처럼 하면 된다.

// 숫자만 입력 가능하도록

private void txt2_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

int check;

//눌려진 값의 숫자 여부를 판단한다.

//숫자로 변환이 되지 않으면 키 입력 막음

if (!int.TryParse(e.Text, out check) )

{

e.Handled = true;

}

//또는 아래처럼 IsDigit 함수를 사용해도 된다.

if (!char.IsDigit(e.Text, e.Text.Length - 1)) e.Handled = true;

}

TextBox Key Input 실습예제

n 두개의 TextBox로 예제를 작성하는데 상단에 있는 TextBox에서는 한글 입력만 막았고 하단 TextBox에서는 숫자만 입력 가능하도록 했다.

MainWindow.xaml

<Window x:Class="WpfApplication10.MainWindow"

xmlns:local="clr-namespace:WpfApplication10"

mc:Ignorable="d"

Ttle="MainWindow" Height="350" Width="525">

<StackPanel>

<TextBox Name="txt1"

Height="30"

Width ="100"

IsEnabled="True"

Focusable="True"

KeyDown="txt1_KeyDown">

</TextBox>

<TextBox Name="txt2"

Height="30"

Width ="100"

IsEnabled="True"

Focusable="True"

PreviewKeyDown="txt2_PreviewKeyDown"

PreviewTextInput="txt2_PreviewTextInput">

</TextBox>

</StackPanel>

</Window>

MainWindow.xaml.cs

using System.Windows;

using System.Windows.Input;

using System.Windows.Media;

namespace WpfApplication10

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

//txt은 한글 입력을 막자

InputMethod.SetIsInputMethodEnabled(this.txt1, false);

}

// 한글 입력만 막고 ESC 키를 누르면 프로그램 종료

private void txt1_KeyDown(object sender, KeyEventArgs e)

{

Key inputKey = e.Key.Equals(Key.ImeProcessed) ? e.ImeProcessedKey : e.Key;

if (inputKey == Key.Escape) Close();

}

// 숫자만 입력 가능하도록

private void txt2_PreviewTextInput(object sender, TextCompositionEventArgs e)

{

//IsDigit 함수를 사용해도 된다.

if (!char.IsDigit(e.Text, e.Text.Length - 1)) e.Handled = true;

}

// Ascii코드 입력인 경우 KeyDown/KeyUp 이벤트에서는 체크안됨

// PreviewKeyDown Ascii 코드 키입력을 감지한다.

// KeyEventArgs의 ImeProcessed를 체크하여 한글키 입력을 알수있다.

private void txt2_PreviewKeyDown(object sender, KeyEventArgs e)

{

// 한글이면키입력 막음

if (e.Key.Equals(Key.ImeProcessed))

{

e.Handled = true;

}

if (e.Key.Equals(Key.Escape)) Close();

}

}

}

댓글 없음:

댓글 쓰기

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...