2019년 1월 26일 토요일

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

WPF 한글, 숫자만 입력 가능하도록
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();
}
텍스트 박스에서 숫자만 입력을 받아야 하는 경우 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 실습예제
두개의 TextBox로 예제를 작성하는데 상단에 있는 TextBox에서는 한글 입력만 막았고 하단 TextBox에서는 숫자만 입력 가능하도록 했다.
MainWindow.xaml
<Window x:Class="WpfApplication10.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
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...