TextBox按键事件处理小数,范围为0到9999999999.99

时间:2018-06-20 01:42:27

标签: c# winforms

我需要一个文本框按键处理程序,该处理程序可以处理0到9999999999.99值的十进制输入范围。我在下面有此代码,但没有达到目的。有了它,我无法在10位数字后输入小数。

public static void NumericWithDecimalTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) &&
        (e.KeyChar != '.'))
    {
        e.Handled = true;
    }

    TextBox textBox = sender as TextBox;
    string[] parts = textBox.Text.Split('.');

    // only allow one decimal point
    if (((e.KeyChar == '.') && (textBox.Text.IndexOf('.') > -1)) || (!char.IsControl(e.KeyChar) && ((parts[0].Length >= 10))))
    {
        e.Handled = true;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以通过以下方式验证数据来简化流程:

public static void NumericWithDecimalTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    var textBox = sender as TextBox;
    var enteredValue = textBox.Text;
    var decimalValue = 0M;

    if (decimal.TryParse(enteredValue, out decimalValue) && ValueIsWithinRange(decimalValue, 0M, 9999999999.99M))
    {
        Model.ThePropertyStoringTheValue = decimalValue; // wherever you need to store the value
    }
    else
    {
        // Inform the user they have entered invalid data (i.e. change the textbox background colour or show a message box)
    }
}

private bool ValueIsWithinRange(decimal valueToValidate, decimal lower, decimal upper)
{
    return valueToValidate >= lower && valueToValidate <= upper
}

这样,如果该值有效,则将其写入模型(遵循良好的MVC设计规范),如果该值无效,则会向用户通知一条消息,使他们可以进行更正(例如,“该值您输入的不是有效的小数”或“该值不能为负”等。