1. ホーム
  2. c#

[解決済み] WPFでテキストボックスが数値入力しか受け付けないようにするにはどうしたらいいですか?

2022-02-09 06:35:16

質問

数字と小数点を受け入れたいが、符号がない。

Windows FormsのNumericUpDownコントロールを使ったサンプルを見てみましたが このサンプルはMicrosoftのNumericUpDownカスタムコントロールです。 . しかし、今のところ、NumericUpDownは(WPFでサポートされているかどうかにかかわらず)私が望むような機能を提供することはできないようなのです。私のアプリケーションの設計では、まともな神経の持ち主なら誰も矢印をいじりたくはないだろう。私のアプリケーションの文脈では、矢印は実用的な意味を持ちません。

そこで、標準的なWPFのテキストボックスが、必要な文字だけを受け入れるようにする簡単な方法を探しています。これは可能ですか?実用的ですか?

解決方法は?

プレビューテキスト入力イベントを追加します。以下のように。 <TextBox PreviewTextInput="PreviewTextInput" /> .

そして、その中に e.Handled テキストが許可されていない場合 e.Handled = !IsTextAllowed(e.Text);

で簡単な正規表現を使っています。 IsTextAllowed メソッドを使用して、入力されたものを許可するかどうかを確認します。私の場合、数字、ドット、ダッシュだけを許可したいのです。

private static readonly Regex _regex = new Regex("[^0-9.-]+"); //regex that matches disallowed text
private static bool IsTextAllowed(string text)
{
    return !_regex.IsMatch(text);
}

不正なデータの貼り付けを防止するために、以下のように DataObject.Pasting イベント DataObject.Pasting="TextBoxPasting" このように こちら (コード抜粋)。

// Use the DataObject.Pasting Handler 
private void TextBoxPasting(object sender, DataObjectPastingEventArgs e)
{
    if (e.DataObject.GetDataPresent(typeof(String)))
    {
        String text = (String)e.DataObject.GetData(typeof(String));
        if (!IsTextAllowed(text))
        {
            e.CancelCommand();
        }
    }
    else
    {
        e.CancelCommand();
    }
}