1

ユーザーが各数値を次の形式で入力するときに、数値の形式を確認したい。小数点の3桁前、およびポイントの1桁後(存在する場合)

ユーザーが3桁を入力した瞬間、小数点を追加しようとしています。ユーザーが番号を入力したときに発生するイベントはありますか?

TextInputイベントとTextInputStartイベントが期待どおりに機能しません。332と入力しようとすると、233と表示されます。TextInputStartイベントで次の関数が呼び出されます。

private void TestFunction(object sender, TextCompositionEventArgs e)
    {
        TextBox txtbox = e.OriginalSource as TextBox;
        string r = txtbox.Text;

        if(r.Contains('.'))
        {
            for (int i = 0; i < r.Length; i++)
            {
                if (r.Substring(i, 1) == ".")
                {
                    txtbox.Text = r.Substring(0, i + 2);

                }
            }
        }

        if (r.Length == 2 && r[2] != '.')
        {
            r += ".";
            txtbox.Text = r;
        }

    }

debugginに気付いたのですが、TextInputStartが起動され、テキストボックスには最後に入力された文字列ではなく、前の文字列が含まれています。

どうにか?:(

4

4 に答える 4

1

OnKeyDown イベントを使用して、テキストの長さを測定し、3 の場合は小数点を追加できます。また、正規表現を使用して実際に入力された値を確認するか、TextBox の InputScope プロパティを設定して、その特定の TextBox に数値キーボードのみを提供することもできます。

自分で小数点を追加する場合は、カーソルをテキストの末尾に移動する方法を説明しているこのページを参照してください。

tbPositionCursor.Select(tbPositionCursor.Text.Length, 0);

OnKeyDown イベントの処理方法は次のとおりです。

private void TextBox1_OnKeyDown(object sender, KeyEventArgs e)
    {
        TextBox t = sender as TextBox;;
        if (e.Key == ...

したがって、TextBox の Text プロパティではなく、KeyEventArgs の Key プロパティをチェックしています。

于 2012-04-19T10:35:20.857 に答える
1

TextInputStart イベントは、TextBox が更新される前にトリガーされるため、古いテキストがまだ含まれています。txtbox.Text を読み取る代わりに、e.Text を使用します。

于 2012-04-19T10:42:32.273 に答える
0

正規表現を使用して、小数点以下3桁と小数点以下1桁をチェックしました。次の関数は、テキストボックスのキーアップイベントで呼び出されます。多くの時間を節約し、メッセージボックスの不必要な使用を避けることができます。誰かが答えを探しているなら、ここに私のものがあります。

 private void ValidateValue(object sender, KeyEventArgs e)
    {
        string sInput, sPattern;

        TextBox txtbox = e.OriginalSource as TextBox;
        sInput = txtbox.Text;

        sPattern = @"^([0-9]{0,3})?(\.([0-9]{1})?)?$";
        Regex reg = new Regex(sPattern);


        if (reg.IsMatch(sInput))
        {
            if (sInput != "" && (sInput[0] == '.' || sInput[0] == '0'))
            {
                txtbox.Text = "";
                return;
            }

            txtbox.Text = sInput;
        }
        else
        {
            txtbox.Text = sInput.Substring(0, sInput.Length - 1);
            txtbox.Select(txtbox.Text.Length, 0);
        }
    }
于 2012-04-24T10:36:07.347 に答える
0

これがWP7にも当てはまるかどうかはよくわかりませんが、C#に似ているので試してみます。.NET には MaskedTextBox もあり、ここで 0.00 で Mask を適用できます。利点: ユーザーは指定された形式の数値のみを入力でき、何もコーディングする必要はありません。

于 2012-04-19T11:30:23.350 に答える