2013-03-13 26 views
4

我的表单具有包含数量的数字的文本框。然后在textchanged事件中,将该数字放置在具有货币值(例如:$ 4.00)的标签的文本属性中。在我的按钮单击事件中,我试图添加标签中的所有值。如果使用下面的代码失败的TryParse每次TryParse失败,参数的货币字符串类型为

int num1; 
string text = lbl85x11bwsub.Text; 
if (int.TryParse(text, out num1)) 
{ 
    MessageBox.Show(num1.ToString()); //testing 
} 
else 
{ 
     MessageBox.Show("it failed"); 
} 

,但如果我使用文本框的文本属性尝试同样的事情,它的工作原理。

int num2; 
if (int.TryParse(txt85x11bw.Text, out num2)) 
{ 
    MessageBox.Show(num2.ToString()); 
} 
else 
{ 
     MessageBox.Show("it failed"); 
} 
+0

抱歉,但你确定'lbl85x11bwsub.Text'包含有效的整数(串)? – Sachin 2013-03-13 19:33:28

+5

在第二个代码中,您从txt获取字符串,而不是lbl。 – LarsTech 2013-03-13 19:33:32

+0

你刚才说标签包含“$”字符..不能转换为int。 – scartag 2013-03-13 19:34:10

回答

5

尝试

Decimal.TryParse(text, 
    NumberStyles.AllowCurrencySymbol, 
    CultureInfo.CurrentCulture, 
    out result); 

代替。 你试图解析数为:

  • 不是整数
  • 包含一个货币符号
+0

仍然返回0。 – KFP 2013-03-13 19:45:47

+0

当您从字符串中排除货币符号时会发生什么?您确定字符串中存在的货币符号是否是文化设置中定义的实际货币符号? ...(调试101) – 2013-03-13 20:19:08

8

@Frederik Gheysels给你只是一个小东西你的问题几乎完整的答案。在这种情况下,您应该使用NumberStyles.Currency,因为您的号码不仅可以不是整数,还可以包含千位和小数点分隔符。虽然NumberStyles.AllowCurrencySymbol只会关注货币符号。另一方面NumberStyles.Currency is a composite number style.它可以允许几乎所有其他分隔符。

所以,这个表情,或许,将作品:

Decimal.TryParse(text, 
    NumberStyles.Currency, 
    CultureInfo.CurrentCulture, 
    out result);