0

そのため、TextBox数字と小数点のみを許可する があります。ユーザーが小数点以下 1 桁までしか入力できないようにしたい。

イベントでトリガーされるPreviewTextInputコードは次のとおりです: (一部のコードは少し冗長ですが、機能します)

    private void PreviewTextInput(object sender, TextCompositionEventArgs e)
    {

        TextBox textBox = (TextBox)sender;

        if (e.Text == ".")
        {

            if (textBox.Text.Contains("."))
            {

                e.Handled = true;
                return;

            }

            else
            {
                //Here I am attempting to add the decimal point myself
                textBox.Text = (textBox.Text + ".");
                e.handled = true;
                return;

            }

        }
        else
        {
            e.Handled = !IsTextAllowed(e.Text);
            return;
        }
    }

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

問題は、入力された最初の小数点は、その後に数値が続くまで「有効」ではないことです。したがって、ユーザーが入力123.し、 a を設定してbreakpointその値を確認すると、textBox.textになります123textBoxが にバインドされているDoubleため、「スマート」になろうとしており、現在「重要でない」値 (「.」) を忘れているため、これが発生していることはわかっています。

私のコードに問題はないはずtextBoxです。不要な(?)自動フォーマットを強制的にスキップさせたいと思っていました。

textBoxその最初の小数点を「気にする」方法はありますか?

回答されなかった可能性のある重複。

また

*小数点以下の桁数を制限する別のアプローチはありますか?" (私はこの分野で多くの調査を行いましたが、他に選択肢はないと思います。)

4

2 に答える 2

0
private void txtDecimal_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!Char.IsDigit(e.KeyChar) && e.KeyChar != '\b' && e.KeyChar!='.')
    {
        e.Handled = true;
    }
    if (e.KeyChar == '.' && txtDecimal.Text.Contains("."))
    {
        e.Handled = true;
    }
}
于 2014-01-19T15:30:14.503 に答える
0

必要な文字を制限するだけの場合は、文字列形式でバインドするようなものがニーズを満たすでしょう

これは double のフォーマットの良い例です

これは、コードで ViewModel にバインドする例です。

    <TextBox Text="{Binding LimitedDouble,StringFormat={}{0:00.00}}"></TextBox>
于 2013-02-25T13:32:04.020 に答える