2012-12-15 33 views
0

我的表單中有一些文本框。我在離開事件中編寫了代碼以自動添加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

你的問題就在這裏:

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

我不相信Substring做什麼,你認爲它。參數不是「startIndex」和「endIndex」(開始和結束),它們是「startIndex」和「Length」(開始和子串長度)。最有可能的是,這種混淆導致您嘗試獲取大於字符串大小的子字符串。

例如,你在說我想要「測試」的後10個字符。 「測試」只有四個字符,所以試圖獲得「最後十個」將導致該錯誤。

+0

是的..但是我的輸出爲123.000000。所以我把我的子串作爲那個。那麼現在我該怎麼做。你可以用另一種方式來得到答案123.00 –

+0

當你在一個調試器中運行它時,「strtax」在第一次設置時的值(子字符串之前的行)是什麼? –

+0

我在strtax中的值是123.000000 –

2

看起來您的最終目標是將價值格式化爲金錢。如果是這種情況,那麼你可以使用方便的Decimal.ToString(「C」)。您可能需要其他許多格式,see this link for more info on formatting