新規作成日 2018-11-21
最終更新日
WPFのUIで、入力支援の一環として数値の入力が必要になるとき、数値以外の入力をできないTextBoxを使いたいときがあります。
PreviewTextInputイベントを使って、TextBoxに値を入力する前に、正規表現を使って、入力された文字が数字であることを確認します。入力された値が、数字の場合のみ、値が入力されます。
以下のコードは、 「C# WPF 数値のみ入力できるTextBoxを作る」から引用しました。
MainWindow.xaml
<Window x:Class="TextBoxNumberOnly.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="数字のみを入力するTextBox" Height="150" Width="350"> <Grid> <TextBox x:Name="textBoxPrice" InputMethod.IsInputMethodEnabled="False" PreviewTextInput="textBoxPrice_PreviewTextInput" CommandManager.PreviewExecuted="textBoxPrice_PreviewExecuted"/> </Grid> </Window>
MainWindow.xaml.cs
using System.Text.RegularExpressions; using System.Windows; using System.Windows.Input; namespace TextBoxNumberOnly { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void textBoxPrice_PreviewTextInput(object sender, TextCompositionEventArgs e) { // 0-9のみ e.Handled = !new Regex("[0-9]").IsMatch(e.Text); } private void textBoxPrice_PreviewExecuted(object sender, ExecutedRoutedEventArgs e) { // 貼り付けを許可しない if (e.Command == ApplicationCommands.Paste) { e.Handled = true; } } } }
xamlコードで、
InputMethod.IsInputMethodEnabled="False"
を指定することで、IMEつまり、日本語入力を無効にしています。
PreviewTextInputイベントを使って、TextBoxに値を入力する前に、正規表現を使って、入力された文字が数字であることを確認します。数字場合のみ、値が入力されます。
このコードでは、CommandManager.PreviewExecutedイベントを使って、貼り付け操作を抑制しています。貼り付けつ値が、数字のときは、貼り付けを許可するコードを追加する場合は、 textBoxPrice_PreviewExecutedメソッドに記述します。
参考