从蒙面文本框中解析文本

时间:2013-12-13 10:31:18

标签: c# winforms maskedtextbox

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

我最近在我的表单上有许多用户输入财务金额的文本框。我最初没有使用任何形式的掩码,每当我需要处理用户输入的值时,我会将每个框中的文本解析为Decimal值,并使用Decimal.Parse;

但是我被要求让文本框看起来像财务金额 即1,050.75英镑而不是1050.75英镑 因此,我开始将文本框更改为MaskedTextBox,并为它们提供了£#,## 0.00的Mask 但是现在每次尝试从MaskedTextBox中解析文本都会出现错误'输入字符串格式不正确'。

如何从MaskedTextBox获取用户输入并解析为十进制格式以便使用?

我是否应该使用MaskedTextBox,还是有另一种方法在表单上显示财务类型格式,而不影响Decimal.Parse方法?

3 个答案:

答案 0 :(得分:2)

当您从Maskedtextbox获取值时,它将值取为£#,## 0.00。所以符号不会转换为十进制。尝试删除该符号并将值转换为十进制。像

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

答案 1 :(得分:1)

您可以在AllowCurrencySymbol中使用格式选项。它必须与文化的货币符号相匹配。这段代码我从VB转换而来,所以我希望它是正确的。

Application.CurrentCulture = New Globalization.CultureInfo("en-GB");
Decimal.Parse("£12,345.67", Globalization.NumberStyles.AllowThousands | Globalization.NumberStyles.AllowDecimalPoint | Globalization.NumberStyles.AllowCurrencySymbol);

此外,如果您不想更改文化,请参阅此问题: Problem parsing currency text to decimal type

答案 2 :(得分:0)

您可以查看MaskFull以查看文字是否正确输入,然后应用反遮罩(通过移除,掩码正在添加的内容)。

不幸的是,我不知道自动取消屏蔽。但你可以这样做:

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