WPF で TextBox が数値入力のみを受け入れるようにするにはどうすればよいですか? 質問する

WPF で TextBox が数値入力のみを受け入れるようにするにはどうすればよいですか? 質問する

数字と小数点は受け入れますが、符号は受け入れません。

WindowsフォームのNumericUpDownコントロールを使ったサンプルを見てみましたが、Microsoft の NumericUpDown カスタム コントロールのサンプルしかし、今のところ、NumericUpDown (WPF でサポートされているかどうかに関係なく) は、必要な機能を提供していないようです。私のアプリケーションの設計では、正気な人なら誰も矢印をいじりたくないでしょう。私のアプリケーションのコンテキストでは、矢印は実際的な意味をなさないのです。

そこで、標準の WPF TextBox に必要な文字だけを受け入れる簡単な方法を探しています。これは可能ですか? 実用的でしょうか?

ベストアンサー1

プレビュー テキスト入力イベントを追加します。次のようにします<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();
    }
}

おすすめ記事