Home > C# > WPF > WPFコントロール > テキスト編集コントロール > TextBox > 数値のみを入力する

TextBoxに数値のみを入力する[C# WPF]

新規作成日 2018-11-21
最終更新日

WPFのUIで、入力支援の一環として数値の入力が必要になるとき、数値以外の入力をできないTextBoxを使いたいときがあります。

キー入力の数値だけが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メソッドに記述します。

参考
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」