清除表单中的所有控件时出现异常

时间:2012-12-15 05:51:16

标签: c# winforms exception-handling

我的表单中有一些文本框。我在离开事件上写了代码,自动添加0.00。我编写代码将两个文本框值添加到第三个

try
{
    decimal netVal = 0;
    decimal.TryParse(txtNetValue.Text, out netVal);
    decimal disc2 = 0;
    decimal.TryParse(txtDisc2.Text, out disc2);
    decimal tax1 = 0;
    decimal.TryParse(txtTax1.Text, out tax1);

    decimal tax = netVal - disc2;
    string strtax = ((tax / 100) * tax1).ToString();
    txtTax2.Text = strtax.Substring(0, strtax.IndexOf(".") + 3);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

在这种情况下,当我点击新按钮清除所有控件时,我将Index and length must refer to a location within the string. Parameter name: length作为例外。

2 个答案:

答案 0 :(得分:2)

您的问题在这里:

strtax.Substring(0, strtax.IndexOf(".") + 3);

我不相信Substring做你认为它做的事。参数不是“startIndex”和“endIndex”(Beginning和End),它们是“startIndex”和“Length”(Beginning和子串的长度)。最有可能的是,这种混淆导致您尝试获取大于字符串大小的子字符串。

例如,你说我想要“Test”的最后10个字符。 “测试”只有四个字符,因此尝试获取“最后十个”将导致该错误。

答案 1 :(得分:2)

看起来你的最终目标是将值格式化为金钱。如果是这种情况,那么您可以使用方便的Decimal.ToString(“C”)。您还可以使用许多其他格式see this link for more info on formatting