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;
        }

    }

在调试时我注意到,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

我不太确定这是否也适用于 WP7,但由于它看起来像 C#,所以我会试一试。在 .NET 中,您还有一个 MaskedTextBox,您可以在其中应用带有 0.00 的 Mask。好处:您的用户只能输入给定格式的数字,而您无需编写任何代码。

于 2012-04-19T11:30:23.350 回答
0

我使用正则表达式检查小数点前三位和小数点后一位。在文本框的按键事件上调用以下函数。节省大量时间,并且可以避免不必要的使用messagebox。如果有人在寻找答案,这是我的。

 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 回答