我有一个用C#编写的WinForms应用程序
我最近在我的表单上有许多用户输入财务金额的文本框。我最初没有使用任何形式的掩码,每当我需要处理用户输入的值时,我会将每个框中的文本解析为Decimal值,并使用Decimal.Parse;
但是我被要求让文本框看起来像财务金额 即1,050.75英镑而不是1050.75英镑 因此,我开始将文本框更改为MaskedTextBox,并为它们提供了£#,## 0.00的Mask 但是现在每次尝试从MaskedTextBox中解析文本都会出现错误'输入字符串格式不正确'。
如何从MaskedTextBox获取用户输入并解析为十进制格式以便使用?
我是否应该使用MaskedTextBox,还是有另一种方法在表单上显示财务类型格式,而不影响Decimal.Parse方法?
答案 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
}