2012-01-10 2 views
0

이것이 작동하지 않는 이유를 모르겠습니다.NumericUpDown 값을 설정할 때 "입력 문자열의 형식이 올바르지 않습니다."

내 프로그램에서 잔뜩을 설정하는 파일을 사용하고 있습니다. 구분자를 사용하여 파일의 내용을 읽습니다. 내 텍스트 파일은 다음과 같습니다 The Message$1$5001&5002&5003

내가 오류가 점점 오전 내 파일의 숫자 값의 값을 읽기 위해 노력하고 있습니다 : nudInterval.Value = decimal.Parse(setting);

이 내가 그것을 할 방법은 다음과 같습니다 :

줄에 Input string was not in a correct format.
if (!lastUsed.EmptyFile()) 
{ 
    string[] allSettings = lastUsed.Text.Split('$'); 
    int settingCount = 0; 

    foreach (string setting in allSettings) 
    { 
     settingCount++; 

     if (settingCount == 1) 
     { 
      txtText.Text = setting; 
     } 
     else if (settingCount == 2) 
     { 
      if (setting == "0") tbType.SelectedTab = tbInterval; 
      else tbType.SelectedTab = tbRange; 
     } 
     else if (settingCount == 3) 
     { 
      nudInterval.Value = decimal.Parse(setting); 
     } 
     else if (settingCount == 4) 
     { 
      nudMin.Value = decimal.Parse(setting); 
     } 
     else if (settingCount == 5) 
     { 
      nudMax.Value = decimal.Parse(setting); 
     } 
    } 
} 
+1

문제는 숫자 위/아래 컨트롤이 아니며 'int.Parse()'메소드입니다. [documentation] (http://msdn.microsoft.com/en-us/library/b3h1hf19.aspx)에서는 입력 문자열이 올바른 형식이 아닌 경우 예외가 발생한다고 말합니다. 입력에 소수점이 포함되어있는 경우 올바른 형식이 아닐 수도 있습니다. '5001 & 5002 & 5003'은 유효한 정수가 아닙니다. –

+0

NumericUpDowns는 십진수를 지원합니까? –

+0

오류를 디버깅 했습니까? 오류가 발생했을 때 _setting_에는 무엇이 있습니다. 또한 .Prim() 내부에서 _Trim() _을 수행하면 약간의 공간이 생길 수 있습니다. 둘째로 if-else 대신 _switch_ 문을 사용하십시오. –

답변

4

구분 기호의 절반이 $가 아닌 &이기 때문입니다.

이것은 당신이 실패합니다

nudInterval.Value = decimal.Parse("5001&5002&5003"); 

을 실행하려고하는 것을 의미한다. 사람들은 유효한 값은 경우

, 당신은 당신의 분할 문 변경할 수 있습니다 :

string[] allSettings = lastUsed.Text.Split(new char[] {'$', '&'}); 

또는 분할하기 전에 $로 & 대체 : 던지고 FormatExceptionint.Parse의 메시지가

string[] allSettings = lastUsed.Text.Replace('&', '$').Split('$'); 
+0

O Duh! 와우 나는 그것을 최소한 4 번 보았고 나의 실수를 발견하지 못했다. LOL. 인간 (내) 어리 석음이 무한하다고 말해야합니다. – HelpNeeder

+0

당신은 이미 답을 얻었습니다. :)하지만 ... 분리 자로 단일 문자를 원하지 않는다고 가정 해 봅시다. (사용자가 메시지를 입력하면 문제가 될 수 있습니다)'string [] allSettings = lastUsed.Text.Split (new string [] { '$ &$'});'3 문자로 구분 기호를 만드시겠습니까 – HelpNeeder

+0

답변에서 split 문을 변경하는 첫 번째 옵션을 살펴보십시오 (질문하신 후 업데이트되었을 수 있습니다). 응답은 yes입니다. char 배열을 사용하여 mult values. –

0

. setting은 무엇입니까? 유효한 숫자 인 문자열이라고 생각하지만 그렇지 않습니다. 아마 &이 걸릴 것입니다.

Console.WriteLine(setting), MessageBox.Show(setting)을 추가하거나 중단 점을 설정하고 디버거에서 setting을 보면 어떻게됩니까?

+0

글쎄, 내 수표가 맞을거야. 파일에 서식을 지정하는 중에 문제가 발생했습니다. – HelpNeeder

관련 문제