从掩码文本框中解析文本

3

我有一个用C#编写的WinForms应用程序。

最近,我的表单上有很多文本框,用户需要在其中输入财务金额。一开始我没有加入任何形式的掩码,每当我需要使用用户输入的值时,我就使用Decimal.Parse将每个文本框中的文本解析为Decimal值;

然而,我被要求使文本框看起来像财务金额,例如 £1,050.75 而不是 1050.75。因此,我开始将文本框更改为MaskedTextBox,并给它们一个掩码为 £#,##0.00。但现在,每次尝试从MaskedTextBoxes中解析文本时都会出现“输入字符串格式不正确”的错误。

我如何获得用户从MaskedTextBox中输入的值,并将其解析为十进制格式以便处理?

我是否应该使用MaskedTextBox,或者是否有其他方法在表单上显示财务类型的格式,而不影响Decimal.Parse方法?

3个回答

2

当您从Maskedtextbox获取值时,它将以£#,##0.00的形式接收该值。因此,符号不会被转换为小数。请尝试删除符号并将该值转换为小数,例如:

        string val= maskedTextBox1.Text.Replace("£","");
        Decimal.Parse(val);

1
您可以使用 AllowCurrencySymbol 的格式选项。它必须与货币符号相匹配。我从VB转换了这段代码,所以希望是正确的。
Application.CurrentCulture = New Globalization.CultureInfo("en-GB");
Decimal.Parse("£12,345.67", Globalization.NumberStyles.AllowThousands | Globalization.NumberStyles.AllowDecimalPoint | Globalization.NumberStyles.AllowCurrencySymbol);

此外,如果您不想更改文化,请参阅此问题: 将货币文本解析为十进制类型时出现问题


0

您可以检查MaskFull以查看文本是否正确输入,然后应用反掩码(通过删除掩码添加的内容来实现)。

不幸的是,我不知道有自动去掩码的方法。但您可以尝试以下操作:

if(maskedTextBox1.Mask)
{
    var enteredText = maskedTextBox1.SubString(1).Replace(",", null); // remove pound symbol and commas
    // ... parse as with normal TextBox
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接