2012-12-15 2 views
0

양식에 일부 텍스트 상자가 있습니다. 나는 leave 이벤트에 코드를 써서 자동으로 0.00을 더한다. 난 내가 Index and length must refer to a location within the string. Parameter name: length으로 예외를 얻고 모든 컨트롤을 취소 할 수있는 새로운 버튼을 클릭하면이 경우양식의 모든 컨트롤을 지우는 경우 예외가 발생합니다.

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); 
} 

으로 세 번째에 두 개의 텍스트 상자 값을 추가하는 코드를 썼다.

답변

2

귀하의 문제는 여기에 있습니다 :

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

내가 Substring 당신이 그것을 수행 생각한다는 것을 믿지 않는다. 인수는 "startIndex"및 "endIndex"(시작 및 종료)가 아니며 "startIndex"및 "Length"입니다 (시작 및 길이는 부분 문자열입니다). 대부분의 경우,이 혼동으로 인해 문자열의 크기보다 큰 하위 문자열을 얻으려고 시도하게됩니다.

예를 들어, "Test"의 마지막 10자를 입력하고 싶습니다.. "Test"에는 4 개의 문자 만 있으므로 "지난 10"을 얻으려고하면 오류가 발생합니다.

+0

예. 그러나 Iam이 123.000000으로 출력을 얻었습니다. 그래서 나는 그 부분 문자열을 가져 간다. 이제 어떻게해야합니까? 123.00 –

+0

디버거에서 실행할 때 "strtax"값을 처음으로 설정할 때 (부분 문자열 바로 앞에있는 줄) 무엇입니까? –

+0

strtax의 내 값은 123.000000입니다. –

2

최종 목표는 돈으로 서식이 지정된 값을 갖는 것 같습니다. 이 경우 편리한 Decimal.ToString ("C")을 사용할 수 있습니다. 다른 형식으로는 see this link for more info on formatting 대신 사용할 수 있습니다.

관련 문제